2015-09-11 3 views
0

У меня есть таблица mysql, и пользователи (колонка пользователя) могут голосовать y или n. (Опция столбца)Mysql как суммировать и отображать как одну строку

Моя структура таблицы, как показано ниже:

| id | option | user |  
| 1 | y  | jack |  
| 2 | n  | jack |  
| 3 | n  | michi|  
| 4 | n  | michi|  

То, что я хотел бы сделать это, выберите отчетливый пользователя и сосчитать вариант и отобразить его в один ряд, как показано ниже:

 
| y | n | 
| 1 | 2 | 

Я попробовал GROUP_CONCAT() и SUM, но не повезло. Можете ли вы, пожалуйста, помочь мне заставить этот sql работать?

Спасибо.

+0

E.g. 'SELECT SUM (y> 0) y, SUM (n> 0) n FROM (SELECT user, SUM (optionyn = 'y') y, SUM (optionyn = 'n') n FROM my_table GROUP BY user) a;' - Я предпочитаю первое решение Rocket – Strawberry

ответ

1

Группа функции, такие как GROUP_CONCAT(), SUM() и COUNT() нужно GROUP BY заявление, чтобы знать, какие строки, чтобы объединить.

В вашем запросе вы хотите использовать COUNT().

Попробуйте это:

SELECT `option`, COUNT(DISTINCT `user`) AS users 
FROM `table` 
GROUP BY `option` 

DEMO: http://sqlfiddle.com/#!9/705a9d/3

Это покажет вам одну строку за option. Если вам нужны оба варианта в одной строке, это немного сложнее. Вам нужно будет использовать подзапросы для каждой опции.

SELECT (
    SELECT COUNT(DISTINCT `user`) 
    FROM `table` 
    WHERE `option` = 'y' 
) AS y, (
    SELECT COUNT(DISTINCT `user`) 
    FROM `table` 
    WHERE `option` = 'n' 
) AS n 

DEMO: http://sqlfiddle.com/#!9/705a9d/4

Примечание: Вы можете использовать COUNT() без GROUP BY. Это сделает запрос совместить все нашел строки вместе.

Смежные вопросы