如何解决如何基于表数据返回标志值
我在大查询中有一个表“ emp”,如下所示:
如果我们将所有列或不同的记录分组,那么我们将得到3作为计数,如果我们计算(*),那么它将得到4
如果不同的记录和count(*)值不相等(本例中为3!= 4),我需要编写一个必须返回“ 1”的查询,否则将“ 0”作为如下标记
解决方法
以下是用于BigQuery标准SQL
#standardSQL
SELECT IF(COUNT(*) = COUNT(DISTINCT FORMAT('%t',t)),1) AS flag
FROM `project.dataset.emp` t
如果要应用于问题中的样本数据-结果为
Row flag
1 1
,
如果要查找重复项,可以使用:
select empno,empname,deptno
from t
group by empno,deptno
having count(*) > 1;
然后,您可以将其合并到查询中以返回标志,如果您愿意的话:
select exists (select 1
from t
group by empno,deptno
having count(*) > 1
) as flag
,
这可能会更好一点...
- 只需将bigquery-public-DATA替换为您的项目,并将austin_bikeshare替换为您的数据集。
为什么更好?
- 查询__表格__并不是免费的:-)
- 在散列上进行不重复计数的速度稍快(如果使用超大型数据集,则将使用rox_count_distinct并取整)
- 您的标志得到的数字介于0和1之间-每个表中都显示了小数位数-可以是
- 运行整个数据集(假设您要做的只是微不足道的事情)。
#standard sql:
select
b.table_id Table_Name,round(safe_divide(count(distinct(FARM_FINGERPRINT(FORMAT('%T',a)))),row_count),4) dup_ratio,cast( trunc(safe_divide(count(distinct(FARM_FINGERPRINT(FORMAT('%T',row_count)) as INT64) your_flag
from
`bigquery-public-data.austin_bikeshare.*` a
inner join
bigquery-public-data.austin_bikeshare.__TABLES__ b
on a._TABLE_SUFFIX = b.table_id
group by
table_id,row_count
结果:
Table_Name dup_ratio your_flag
bikeshare_stations 0.0104 0
bikeshare_trips 1.0 1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。