如何用SQL统计多列中相同数据的出现次数
统计多列中数据的出现次数
源数据表
| op0 | op1 | op2 | op3 | op4 | op5 |
|---|---|---|---|---|---|
| 2309 | 2799 | 9738 | |||
| 233001 | 233861 | 236731 | 9999 | ||
| 2309 | 233001 | 8931 | |||
| 233001 | 236731 | ||||
| 2309 | 233001 | 2792 | 2799 | 9999 | |
| 232 | 233001 | ||||
| 2309 | 233001 | 2799 | |||
| 233001 | 233861 | 236731 | 9999 |
需求
统计上述表格中所有op0至op5列里各数据的出现次数,得到如下统计结果:
预期统计结果
| all op | count |
|---|---|
| 2309 | 4 |
| 232 | 1 |
| 233001 | 7 |
| 233861 | 2 |
| 236731 | 3 |
| 2792 | 1 |
| 2799 | 3 |
| 8931 | 1 |
| 9738 | 1 |
| 9999 | 3 |
实现SQL语句
SELECT op_value AS `all op`, COUNT(*) AS count FROM ( SELECT op0 AS op_value FROM your_table_name UNION ALL SELECT op1 AS op_value FROM your_table_name UNION ALL SELECT op2 AS op_value FROM your_table_name UNION ALL SELECT op3 AS op_value FROM your_table_name UNION ALL SELECT op4 AS op_value FROM your_table_name UNION ALL SELECT op5 AS op_value FROM your_table_name ) AS unpivoted WHERE op_value IS NOT NULL AND op_value != '' GROUP BY op_value ORDER BY op_value;
说明
- 用
UNION ALL将所有op列的行数据垂直拼接成单列,避免UNION自动去重导致统计错误 - 过滤空值(包括NULL和空字符串),确保统计有效数据
- 对拼接后的单列数据分组统计次数,最后按数据值排序
内容的提问来源于stack exchange,提问作者Iearth Nakub
相关产品推荐
相关产品推荐

