Mysql 使用Group By和Union All计算多个列?

Mysql 使用Group By和Union All计算多个列?,mysql,group-by,count,Mysql,Group By,Count,我有一个查询,我想计算3列s、s2和s3的值,并使用Group By列s的值 到目前为止,我已经做到了这一点 这将给我输出 1 - count 3 2 - count 3 4 - count 4 这几乎是正确的,但我还想包括Where子句correct,因此计数将仅为Where seash='2018/2019'和round=34 所需的输出必须是: 1 - count 3 2 - count 2 4 - count 2 知道如何编辑此查询以便Where子句在计算的值中工作吗

我有一个查询,我想计算3列s、s2和s3的值,并使用Group By列s的值

到目前为止,我已经做到了这一点

这将给我输出

1 - count 3  
2 - count 3  
4 - count 4
这几乎是正确的,但我还想包括Where子句correct,因此计数将仅为Where seash='2018/2019'和round=34

所需的输出必须是:

1 - count 3  
2 - count 2  
4 - count 2
知道如何编辑此查询以便Where子句在计算的值中工作吗

诸位,


Arie

您应该为union中的每个表筛选行

SELECT t.s, COUNT(*) as count FROM (
SELECT s 
FROM tablename 
WHERE season = '2018/2019'  and round = 34
UNION all
SELECT s2 
FROM tablename 
WHERE season = '2018/2019' and round = 34
UNION all
SELECT s3 
FROM tablename
WHERE season = '2018/2019' and round = 34
) as t 
GROUP BY t.s
ORDER BY count DESC

您必须扩展联合查询以包括季节和回合,并在where子句中添加条件:

SELECT t.s, COUNT(*) as count FROM (
    SELECT s, season, round FROM tablename UNION all
    SELECT s2, season, round FROM tablename UNION all
    SELECT s3, season, round FROM tablename
) as t 
WHERE 
  t.s IN (
    SELECT s FROM tablename
    WHERE season = '2018/2019' 
      AND round = 34
      AND s is not null
  )
  AND t.season = '2018/2019' 
  AND t.round = 34
  AND t.s is not null
GROUP BY t.s
ORDER BY count DESC, t.s
请参阅。
结果:


如果在季节和回合中没有s,那么你会删除s2和s3-我很好奇为什么?因为我只想对列s的值进行分组。这很好,唯一的问题是现在每个值都被计算,但我只想让列s进行分组,在这个解中,数字3也被计算。
| s   | count |
| --- | ----- |
| 1   | 3     |
| 2   | 2     |
| 4   | 2     |