【问题标题】:SQL: How do I get a filtered count for each distinct row in a table?SQL:如何获得表中每个不同行的过滤计数?
【发布时间】:2020-05-05 00:02:44
【问题描述】:

注意:这与“我想要对表格中的每个不同行进行计数”的问题不同,后者已被多次回答。这是一个过滤计数,因此查询的计数部分需要更复杂的 WHERE 子句。考虑这个数据集:

customer_id | user_id | age
-----------------------------
1           | 932     | 20
1           | 21      | 3
1           | 2334    | 32
2           | 232     | 10
2           | 238     | 28
3           | 838     | 39
3           | 928     | 83
4           | 842     | 12

我想查询此表并了解每个不同 customer_id 的 13 岁以上用户数。所以结果是:

customer_id | over_13_count
-----------------------------
1           | 2
2           | 1
3           | 2
4           | 0

我尝试过这样的事情,但它永远运行,所以我认为我做错了:

SELECT DISTINCT customer_id,
(SELECT COUNT(*) FROM mytable AS m2 WHERE m2.customer_id = m1.customer_id AND age > 13) AS over_13_count
FROM mytable AS m1
ORDER BY customer_id

【问题讨论】:

    标签: sql google-cloud-spanner


    【解决方案1】:

    只使用条件聚合:

    SELECT customer_id,
           SUM(CASE WHEN age > 13 THEN 1 ELSE 0 END) asover_13_count
    FROM mytable m1
    GROUP BY customer_id
    

    【讨论】:

      猜你喜欢
      • 2020-09-02
      • 1970-01-01
      • 2015-09-18
      • 1970-01-01
      • 2023-02-24
      • 2013-10-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多