MySQL计算字段中值的出现次数

时间:2009-12-25 11:32:29

标签: mysql pivot

我有一个MySQL表,其中包含115个这样的字段:

v1q1  v1q2  v2q1  v2q2  v3q1  v3q3 (...)

记录都包含值0,1,2,3或4中的一个。

现在我需要为每个字段计算包含0的记录数,包含1的记录数,包含2的记录数,...(直到4)。

我如何以一种相当有效的方式实现这一目标?

2 个答案:

答案 0 :(得分:3)

您可以使用IF语句并执行sum,如下所示:

SELECT
 SUM(IF(v1q1=0, 1, 0)) as cnt0, 
 SUM(IF(v1q1=1, 1, 0)) as cnt1,
 SUM(IF(v1q1=2, 1, 0)) as cnt2,
 SUM(IF(v1q1=3, 1, 0)) as cnt3,
 SUM(IF(v1q1=4, 1, 0)) as cnt4 
FROM `myTable`

答案 1 :(得分:3)

你不能以任何有效的方式做到这一点。数据库本身的布局效率低下,无法通过任何类型的查询来解决这个问题。

帕特里克向您展示了如何在表格中的单个字段中执行此操作。现在创建一个包含115次的查询...如您所见,这样效率不高。

您应该在表格中拥有现在您在字段名称中拥有的数据所在数据所属的值;在字段中:

id v q value
-------------
1  1 1 2
1  1 2 4
1  2 1 0
1  2 2 1
1  3 1 3
1  3 3 2
2  1 1 0
2  1 2 1
2  1 2 0
2  2 1 4
...

现在您已将所有数据作为实际数据,您可以有效地获取信息:

select v, q, value, count(*)
from TheTable
group by v, q, value