Система голосования, реляционная БД, SQL-запрос

Я хочу разработать систему голосования с двумя таблицами.

Первая таблица содержит индекс и имя кандидата.

Другой содержит индекс, индекс избирателя и кандидата, которого поддерживает избиратель.

Один избиратель может поддержать несколько кандидатов.

Я хочу запрос SQL, который показывает имя кандидата с числом его сторонников.

Так что результат выглядит

Иоанн 12, Боб 8, Давид 3...

SELECT `name`, COUNT(table2.voter) AS `count` 
FROM `table1` 
LEFT JOIN `table2` 
   ON table1.idx = table2.support 
ORDER BY COUNT(table2.voter) DESC;

Приведенный выше запрос дал только одну строку с общим количеством избирателей.

Кто-нибудь может дать мне какие-нибудь советы?

2 ответа

Решение
SELECT `name`, COUNT(table2.voter) AS `count` 
FROM `table1` 
LEFT JOIN `table2` ON table1.idx = table2.support
GROUP BY `name`
ORDER BY COUNT(table2.voter) DESC;

Вы пропустили group by и, следовательно, получить только первый результат.

Вам нужно GROUP BY неагрегированный столбец (name), иначе запрос будет по умолчанию для одной группы; весь набор результатов; и выбрать произвольный name:

   SELECT `name`, COUNT(table2.voter) AS `count` 
     FROM `table1` 
LEFT JOIN `table2` 
       ON table1.idx = table2.support
 GROUP BY `name` 
 ORDER BY count DESC;

Вы можете использовать псевдонимы столбцов в ORDER BYтак что я должен обновить это также

Другие вопросы по тегам