mysql - 我可以使用 Group By 计算多列吗?

标签 mysql group-by count

我有一个包含这些列的表格:

s, s2, s3  
1, 2,  3  
4  
1, 3  
4, 2,  
2, 1  
3, 4  
4  

我想知道 s 列中的唯一值在 s、s2 和 s3 列中出现了多少次。

到目前为止我有:

$query = "SELECT s, COUNT(*) as count FROM table GROUP BY s";

这会给我:

1 - count 2  
2 - count 1  
3 - count 1  
4 - count 3  

但我也想计算 s2 和 s3 列,所以结果将是:

1 - count 3  
2 - count 3  
3 - count 3  
4 - count 4

知道我必须如何编辑查询才能按列 s 的值对列 s、s2 和 s3 进行分组吗?

亲切的问候,

阿里

最佳答案

您需要对所有列使用 UNION ALL,然后对它们进行计数:

select
  t.s, count(*) counter
from (
  select s from tablename union all
  select s2 from tablename union all
  select s3 from tablename
) t
where t.s is not null
group by t.s

参见 demo .
结果:

| s   | counter |
| --- | ------- |
| 1   | 3       |
| 2   | 3       |
| 3   | 3       |
| 4   | 4       |

如果在 s2s3 列中存在 s 列中不存在的值,并且您希望将它们排除在外,那么改为的:

where t.s is not null

使用

where t.s in (select s from tablename)

关于mysql - 我可以使用 Group By 计算多列吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56631388/

相关文章:

php - SQL 错误 mysql_fetch_array() : not valid?

sql - 使用 SQL 计算列中的项目数

mysql - 计算每周在场总和

java - 计算数组java中的出现次数

MySQL COUNT IF 和 GROUP BY

mysql - 对多列求和 - 意外结果

mysql - 如何在一个 SQL 命令中运行多个 SQL 更新?

mysql - 如何确保单元测试 Doctrine 尝试加载到与开发相同的数据库?

sql - 按日期范围分组 (teradata)

mysql - 如何使用 "select count(*)"和 "group by"加速 "where"?