2009-12-25 25 views
1

我有含115個字段,如它們的MySQL表:MySQL的計數值的出現在字段

v1q1 v1q2 v2q1 v2q2 v3q1 v3q3 (...) 

所有包含值中的一個的記錄0,1,2,3或4。

現在我需要爲每個字段計數包含0的記錄數,包含1的記錄數,包含2 ...(直到4)的記錄數。

我如何以一種相當有效的方式完成此任務?

回答

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` 
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 
+0

HM,你有一個點這裏 – Glenn 2009-12-26 11:22:50