Ric*_*ard 3 sql google-bigquery
抱歉,这肯定是重复的,但我不知道谷歌搜索的正确词。
我有一个购买决策表,如下所示:
org_id item_id spend
--------------------------
123 AAB 2
123 AAC 4
124 AAB 10
124 AAD 5
Run Code Online (Sandbox Code Playgroud)
我想找到仅由三个或更少组织购买的所有物品。然后我想按总支出对它们进行排序。
我将如何在 SQL 中执行此操作?注意我正在使用BigQuery 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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
请注意,在 BigQuery 中:
如果将 COUNT 与 DISTINCT 关键字一起使用,则该函数将返回指定字段的不同值的数量。请注意,DISTINCT 的返回值是统计近似值,不能保证准确。
要计算不同值的确切数量,请使用 EXACT_COUNT_DISTINCT。或者,为了获得更具可扩展性的方法,请考虑对相关字段使用 GROUP EACH BY,然后应用 COUNT(*)。GROUP EACH BY 方法更具可扩展性,但可能会导致轻微的前期性能损失。
有关 COUNT 和 DISTINCT 的更多信息,请参阅https://cloud.google.com/bigquery/query-reference#aggfunctions的语法部分