我想用两个表来设计投票系统。
第一张表包含候选人'索引和名称。
另一个包含选民支持的索引,选民和候选人指数。
一位选民可以支持多名候选人。
我想要一个显示候选人的SQL查询'名称及其支持者的数量。
所以结果看起来像
John 12,Bob 8,David 3 ......
SELECT `name`, COUNT(table2.voter) AS `count`
FROM `table1`
LEFT JOIN `table2`
ON table1.idx = table2.support
ORDER BY COUNT(table2.voter) DESC;
上述查询只提供了一行,选民总数。
任何人都可以给我任何提示吗?
答案 0 :(得分: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
,因此只获得了第一个结果。
答案 1 :(得分:1)
您需要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
中使用列别名,因此我也对此进行更新