MySQL подсчитывает вхождение значений в поле - PullRequest
1 голос
/ 25 декабря 2009

У меня есть MySQL таблица, содержащая 115 таких полей:

v1q1  v1q2  v2q1  v2q2  v3q1  v3q3 (...)

Все записи содержат одно из значений 0, 1, 2, 3 или 4.

Теперь мне нужно подсчитать для каждого поля количество записей, содержащих 0, количество записей, содержащих 1, количество записей, содержащих 2, ... (до 4).

Как я могу сделать это довольно эффективным способом?

Ответы [ 2 ]

3 голосов
/ 25 декабря 2009

Вы не можете сделать это любым эффективным способом. Структура самой базы данных неэффективна, и вы не можете преодолеть это с любым видом запроса.

Патрик показал вам, как это сделать для одного поля таблицы. Теперь сделайте запрос, содержащий 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
3 голосов
/ 25 декабря 2009

Вы можете использовать оператор 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`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...