Система голосования, реляционная БД, 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
так что я должен обновить это также