SQL: 如何获得表中每条不同行的过滤计数?

问题描述 投票:0回答:1

注意:这不同于问 "我想要一个表中每条不同行的计数 "的问题,这个问题已经回答过很多次了。这是一个过滤后的计数,所以查询的计数部分需要一个比较复杂的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个回答
2
投票

用条件聚合就可以了。

SELECT customer_id,
       SUM(CASE WHEN age > 13 THEN 1 ELSE 0 END) asover_13_count
FROM mytable m1
GROUP BY customer_id
© www.soinside.com 2019 - 2024. All rights reserved.