计算多列mysql

时间:2015-06-12 09:28:02

标签: mysql sql count

我很难编写查询,计算多列中特定值的出现次数。我无法改变db的结构。我知道我可以在最后使用多个查询和联合来做到这一点,但我想知道是否有更聪明的解决方案。

这是一个例子。

+ ----------- ------------ + ------------ + ------- + ------ +
| A | C | ç| d |
+ ----------- ------------ + ------------ + ------- + ----- +
| VALUE1 | value2 | value1 | value3 |
|值2 | value3 | value1 | value4 |
| VALUE1 | value3 | value2 | value1 |
|值3 | value1 | value1 | value1 |
| VALUE1 | value1 | value1 | value1 |
+ ----------- ------------ + ------------ + ------- + ----- +

我想计算每列的值= value1的字段数。结果集应如下所示:



+ ----------- ------------ + +
|专栏|统计|
+ ----------- ------------ + +
| A | 3 |
| C | 2 |
| ç| 4 |
| d | 3 |
+ ----------- + ------------ +

由于

2 个答案:

答案 0 :(得分:2)

如果您希望将它放在与Anirudh的响应类似的单行上,请尝试以下操作:

SELECT SUM(A='Value1'),
    SUM(B='Value1'),
    SUM(C='Value1'),
    SUM(D='Value1')
FROM TableName

或者按照您指定的方式使用它:

SELECT 'A', SUM(A='Value1')
FROM TableName
UNION
SELECT 'B', SUM(B='Value1')
FROM TableName
UNION
SELECT 'C', SUM(C='Value1')
FROM TableName
UNION
SELECT 'D', SUM(D='Value1')
FROM TableName

编辑:SQL小提琴http://sqlfiddle.com/#!9/5a99a/6

答案 1 :(得分:0)

你可以使用水平聚合

来做到这一点

`SELECT sum(case when A=value1 then 1 else 0 END) as CountValue1,sum(case when A=value2 then 1 else 0 END) as CountValue2,sum(case when A=value3 then 1 else 0 END) as CountValue3   FROM tableName;`

通过这种方式,您可以将行转换为列而不是将行转换为行