MySQL能否将app字段拆分为两列并按grupo_id分组统计?
可行,用条件聚合即可实现
你可以通过条件聚合(结合CASE表达式与聚合函数)来实现需求,直接按grupo_id分组,同时统计每个分组内app=1和app=0的数量。
实现SQL
SELECT grupo_id, COUNT(CASE WHEN app = 1 THEN 1 END) AS `app-on`, COUNT(CASE WHEN app = 0 THEN 1 END) AS `app-off` FROM devices GROUP BY grupo_id;
也可以用SUM函数实现,效果完全一致:
SELECT grupo_id, SUM(CASE WHEN app = 1 THEN 1 ELSE 0 END) AS `app-on`, SUM(CASE WHEN app = 0 THEN 1 ELSE 0 END) AS `app-off` FROM devices GROUP BY grupo_id;
原理说明
CASE WHEN app = 1 THEN 1 END会在app等于1时返回1,否则返回NULL;COUNT函数会忽略NULL值,因此只会统计符合条件的行数。- 按
grupo_id分组后,每个分组会分别计算app=1和app=0的总数量,直接得到你需要的拆分结果。
示例对比
假设原查询的结果是:
| total | app | grupo_id |
|---|---|---|
| 5 | 1 | 101 |
| 3 | 0 | 101 |
| 2 | 1 | 102 |
| 7 | 0 | 102 |
新查询的结果会变成:
| grupo_id | app-on | app-off |
|---|---|---|
| 101 | 5 | 3 |
| 102 | 2 | 7 |
内容的提问来源于stack exchange,提问作者KhaldunT
相关产品推荐
相关产品推荐

