Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL中获取不同的以下GROUP BY的计数?_Sql_Google Bigquery - Fatal编程技术网

如何在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