投票系统,关系数据库,sql 查询

voting system, relational db, sql query

我想用两个table设计投票系统。

第一个 table 包含候选人的索引和姓名。

另一个包含索引,选民和选民支持的候选人索引。

一个选民可以支持多个候选人。

我想要一个 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;

上面的查询只给出了一行选民总数。

任何人都可以给我任何提示吗?

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 中使用列别名,所以我也更新了这个