如何在SQL中获取不同的以下GROUP BY的计数?
抱歉,这肯定是重复的,但我不知道谷歌该用什么词 我有一张采购决策表,如下所示:如何在SQL中获取不同的以下GROUP BY的计数?,sql,google-bigquery,Sql,Google Bigquery,抱歉,这肯定是重复的,但我不知道谷歌该用什么词 我有一张采购决策表,如下所示: org_id item_id spend -------------------------- 123 AAB 2 123 AAC 4 124 AAB 10 124 AAD 5 我想找到所有只被三个或更少的组织购买的物品。然后我想按金额订购 在SQL中如何实现这一点?注意,我正在使用 到
org_id item_id spend
--------------------------
123 AAB 2
123 AAC 4
124 AAB 10
124 AAD 5
我想找到所有只被三个或更少的组织购买的物品。然后我想按金额订购
在SQL中如何实现这一点?注意,我正在使用
到目前为止,我已经:
SELECT *
FROM
(SELECT ??(org_id) as org_count, -- How do I get the count of different org_ids?
item_id,
SUM(spend) AS total_spend
FROM mytable
GROUP BY item_id) t
WHERE org_count < 4
ORDER BY total_spend DESC
在您的SQL品牌中可能略有不同,但在SQL Server中您会这样做:
Select item_id, sum(spend) as total_spent, count(distinct org_id) as num_orgs
from myTable
group by item_id
having num_orgs <= 3
order by total_spend desc
请注意,在BigQuery中:
如果使用带有DISTINCT关键字的COUNT,函数将返回
指定字段的不同值的数目。请注意
DISTINCT的返回值是一个统计近似值,是
不保证准确
要计算不同值的确切数目,请使用
精确计数。或者,对于更具伸缩性的方法,考虑使用
按相关字段分组,然后应用计数*。这个
按每个方法分组更具可扩展性,但可能会产生轻微影响
提前表现惩罚
在的语法部分中查看有关计数和区分的更多信息,这太神奇了。我学到了很多。非常感谢。
SELECT
item_id,
EXACT_COUNT_DISTINCT(org_id) AS org_count,
SUM(spend) AS total_spent
FROM mytable
GROUP BY item_id
HAVING org_count < 4
ORDER BY total_spend DESC