SQL计算GBQ中表中的不同行数

Posted

技术标签:

【中文标题】SQL计算GBQ中表中的不同行数【英文标题】:SQL Count distinct number of rows in table in GBQ 【发布时间】:2020-11-17 20:05:06 【问题描述】:

我想计算表中不同行的数量。我知道我可以使用 groupby 或一一命名所有列来做到这一点,但我只想这样做:

select count(distinct *) from my_table

这可能吗?

【问题讨论】:

表有主键吗? 【参考方案1】:

派生表(子查询)中执行SELECT DISTINCT,然后计算返回的行数。

select count(*) from
(select distinct * from my_table) dt

(你的表没有主键吗?)

【讨论】:

【参考方案2】:

你可以使用to_json_string():

select count(distinct to_json_string(t))
from t;

【讨论】:

谢谢戈登!我喜欢这种语法!【参考方案3】:

以下是 BigQuery Standard SQL 的更多选项

select count(distinct format('%t', t))
from `project.dataset.table` t

取决于您的用例 - 近似计数可能是更好的选择

select approx_count_distinct(format('%t', t))
from `project.dataset.table` t

APPROX_COUNT_DISTINCT - 返回 COUNT(DISTINCT 表达式)的近似结果。返回的值是统计估计值,不一定是实际值。此函数不如 COUNT(DISTINCT 表达式) 准确,但在大量输入时表现更好

【讨论】:

谢谢米哈伊尔!并为更大的表添加 approx_count_distinct。【参考方案4】:

不允许使用count(distinct *)

或者,您可以明确命名列(定义唯一性)。

【讨论】:

以上是关于SQL计算GBQ中表中的不同行数的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL 中的不同行上将多个时间段连接在一起?

在一个表中的不同行和不同列中查找相同的值SQL

具有重复电子邮件 ID 的不同行数

C# Linq 如何选择数据表中多列的不同行数

SQL查询以选择具有最小值的不同行

如何在准备好的语句php中的不同行中插入多条记录