我有一个包含这些列的表格:
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 |
如果在 s2
和 s3
列中存在 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/