计算多列 mysql
Count multiple columns mysql
我很难编写计算多个列中特定值出现次数的查询。我无法更改数据库的结构。我知道我可以在最后使用多个查询和联合来做到这一点,但我想知道是否有更智能的解决方案。
这是一个例子。
+------------+------------+------------+------ ------+
| A | B |
C |
D |
+------------+------------+------------+------ ------+
|值 1 |值 2 |值 1 |值 3 |
|值 2 |值 3 |值 1 |值 4 |
|值 1 |值 3 |值 2 |值 1 |
|值 3 |值 1 |值 1 |值 1 |
|值 1 |值 1 |值 1 |值 1 |
+------------+------------+------------+------ ------+
我想计算每列中 value=value1 的字段数。结果集应如下所示:
+------------+------------+
|专栏 |计数 |
+------------+------------+
| A | 3 |
| B | 2 |
| C | 4 |
| D | 3 |
+------------+------------+
谢谢
你可以使用水平聚合来做到这一点
`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;`
通过这个你可以将行转换为列但不能将列转换为行
如果您希望它像 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 Fiddle http://sqlfiddle.com/#!9/5a99a/6
我很难编写计算多个列中特定值出现次数的查询。我无法更改数据库的结构。我知道我可以在最后使用多个查询和联合来做到这一点,但我想知道是否有更智能的解决方案。
这是一个例子。
+------------+------------+------------+------ ------+
| A | B |
C |
D |
+------------+------------+------------+------ ------+
|值 1 |值 2 |值 1 |值 3 |
|值 2 |值 3 |值 1 |值 4 |
|值 1 |值 3 |值 2 |值 1 |
|值 3 |值 1 |值 1 |值 1 |
|值 1 |值 1 |值 1 |值 1 |
+------------+------------+------------+------ ------+
我想计算每列中 value=value1 的字段数。结果集应如下所示:
+------------+------------+
|专栏 |计数 |
+------------+------------+
| A | 3 |
| B | 2 |
| C | 4 |
| D | 3 |
+------------+------------+
谢谢
你可以使用水平聚合来做到这一点
`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;`
通过这个你可以将行转换为列但不能将列转换为行
如果您希望它像 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 Fiddle http://sqlfiddle.com/#!9/5a99a/6