SQL多COUNT()带条件查询:按日期、分组统计唯一姓名
解决按日期、分组统计唯一姓名的SQL查询问题
核心解决方案
要同时满足按日期维度、分组统计唯一姓名的需求,你需要在查询中同时将Dates和Group作为分组依据,配合COUNT(DISTINCT Name)统计每组的唯一姓名数量;若需日期过滤,直接在WHERE子句添加对应条件即可。
示例实现
假设你的样例表结构如下(表名:user_stats):
| Dates | Group | Name |
|---|---|---|
| 2024-01-01 | A | Alice |
| 2024-01-01 | A | Bob |
| 2024-01-01 | B | Alice |
| 2024-01-02 | A | Bob |
| 2024-01-02 | B | Charlie |
正确查询语句
SELECT Dates, `Group`, -- Group是SQL关键字,需用反引号(MySQL)或方括号(SQL Server)包裹 COUNT(DISTINCT Name) AS unique_name_count FROM user_stats -- 添加日期过滤条件,示例为统计2024年1月数据 WHERE Dates BETWEEN '2024-01-01' AND '2024-01-31' GROUP BY Dates, `Group` ORDER BY Dates, `Group`;
对应的期望输出
| Dates | Group | unique_name_count |
|---|---|---|
| 2024-01-01 | A | 2 |
| 2024-01-01 | B | 1 |
| 2024-01-02 | A | 1 |
| 2024-01-02 | B | 1 |
关键注意点
- 分组字段完整性:必须将
Dates和Group都放入GROUP BY子句,否则无法按双维度正确分组统计。 - 关键字处理:
Group是SQL保留关键字,作为列名时需用反引号/方括号包裹,避免语法错误。 - 日期过滤:日期条件需与数据库存储的日期格式匹配,若只需某一天的数据,直接用
Dates = '2024-01-01'即可。 - 唯一值统计:
COUNT(DISTINCT Name)会自动忽略同一分组内的重复姓名,仅统计唯一值数量。
内容的提问来源于stack exchange,提问作者Hibann
相关产品推荐
相关产品推荐

