我有含115個字段,如它們的MySQL表:MySQL的計數值的出現在字段
v1q1 v1q2 v2q1 v2q2 v3q1 v3q3 (...)
所有包含值中的一個的記錄0,1,2,3或4。
現在我需要爲每個字段計數包含0的記錄數,包含1的記錄數,包含2 ...(直到4)的記錄數。
我如何以一種相當有效的方式完成此任務?
我有含115個字段,如它們的MySQL表:MySQL的計數值的出現在字段
v1q1 v1q2 v2q1 v2q2 v3q1 v3q3 (...)
所有包含值中的一個的記錄0,1,2,3或4。
現在我需要爲每個字段計數包含0的記錄數,包含1的記錄數,包含2 ...(直到4)的記錄數。
我如何以一種相當有效的方式完成此任務?
可以使用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`
你不能這樣做,在任何有效的方式。數據庫本身的佈局效率低下,並且無法通過任何查詢來克服。
帕特里克向您展示瞭如何爲表格中的單個字段執行此操作。現在做一個包含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
HM,你有一個點這裏 – Glenn 2009-12-26 11:22:50