MySQL计算行数,其中列=值

8
我有一个看起来很像这样的数据库: enter image description here 我想做一个MySQL查询,统计每个id的投票数,并按照从高到低的顺序排序。我希望输出结果如下所示: enter image description here 不使用嵌套3个查询,这是否可能?
1个回答

22
select
    name,
    sum(votes) as total_votes
from mytable
group by 1
order by 2 desc

4
更易读的写法是按名称分组 (group by name) 并按票数总和排序 (order by sum(votes))。我不喜欢通过位置引用列。 - IMSoP
非常感谢,运行得非常好!顺便说一句,IMSoP,它不应该是 order by total_votes 吗? - Cheezen
1
@IMSoP 这是 SQL 标准,我总是使用列位置而不是 group/order by 中的表达式。使用它的维护成本要低得多,因为表达式可能会 a) 很长,导致分组模糊不清, b) 被更改,这意味着您必须将新表达式复制并粘贴到 group 和 order by 两个子句中 - 更麻烦,而且实际上没有增加任何价值。 - Bohemian
2
@Bohemian 这只是个人口味问题。如果允许使用列别名,我肯定会使用。列位置似乎有点难以阅读 - 您必须找到 Select 子句并确定引用的是哪个列;如果您在选择中添加了一个额外的列,并且没有正确更新引用,可能会导致一些非常意外的行为。 - IMSoP
@Bohemian,对于Group By来说这是正确的(假设MySQL不会猜测你的意图),但对于Order By则不然。对我来说,别名就像变量名一样,不需要复制粘贴或太多的解释。位置数字似乎有点难以理解;但就像我所说,这只是个人口味问题。 - IMSoP
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接