SQL技术需求:按os_name、program分组统计行数并展示指定字段
解决分组统计重复组合的SQL方案
先来看你的输入数据:
| ID | time | os_name | program | last_line |
|---|---|---|---|---|
| 14 | 2019-01-04 14:00:00 | titi | roro | 109 |
| 15 | 2019-01-04 14:00:00 | titi | roro | 109 |
| 16 | 2019-01-04 14:00:00 | gege | fefe | 109 |
你需要统计os_name与program组合的出现次数,同时保留指定字段信息,最终得到目标格式的结果:
| time | nb_os_name_program | os_name | program | last_line |
|---|---|---|---|---|
| 2019-01-04 14:00:00 | 2 | titi | roro | 109 |
| 2019-01-04 14:00:00 | 1 | gege | fefe | 109 |
对应的SQL语句
用GROUP BY分组配合聚合函数就能轻松实现,直接拿去测试就行:
SELECT time, COUNT(*) AS nb_os_name_program, os_name, program, last_line FROM your_table_name -- 这里替换成你的实际表名 GROUP BY time, os_name, program, last_line;
语句说明
GROUP BY time, os_name, program, last_line:把所有字段值完全一致的行归为一组——毕竟你需要保留这些字段,且同一组内的os_name+program组合是重复的。COUNT(*):统计每组内的行数,也就是该os_name+program组合(在相同time和last_line下)的出现次数,别名设为你要的nb_os_name_program。
如果你的ID是唯一主键,用COUNT(ID)代替COUNT(*)效果完全一样,部分数据库里性能还会更优哦~
内容的提问来源于stack exchange,提问作者jack94
相关产品推荐
相关产品推荐

