MySQL:从另一个表中使用两个计数进行排序?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL:从另一个表中使用两个计数进行排序?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1778字,纯文字阅读大概需要3分钟。
内容图文
![MySQL:从另一个表中使用两个计数进行排序?](/upload/InfoBanner/zyjiaocheng/892/83b51c0e77ba4295a8cd8ca33bbde247.jpg)
我有一个看起来像这个名为“posts”的sql表:
id | user
--------------------------------
0 | tim
1 | tim
2 | bob
另一个叫“投票”,在“帖子”表中的帖子上存储upvotes或downvotes:
id | postID | type
--------------------------------
0 | 0 | 0
1 | 2 | 1
2 | 0 | 1
3 | 0 | 1
4 | 3 | 0
在此表中,’type’为0表示downvote或1表示upvote.
我如何通过“帖子”(upvotes-downvotes)的数量按“蒂姆”订购帖子?
解决方法:
SELECT
p.id,
p.user,
SUM(v.type * 2 - 1) AS votecount
FROM posts p
LEFT JOIN votes v ON p.id = v.postID
WHERE p.user = 'tim'
GROUP BY p.id, p.user
ORDER BY votes DESC
更新 – p和v解释.
在此查询中,p和v分别是帖子和投票的别名.别名本质上是一个替代名称,它仅在声明它的语句范围内定义(在本例中为SELECT语句).不仅表可以有别名,还有列.在此查询中,votecount是SUM(v.type * 2 – 1)表达式表示的列的别名.但目前我们只谈论桌子.
在继续关于表别名的解释之前,我将简要解释为什么你可能需要使用表名来为列名添加前缀,比如posts.id而不是id.基本上,当查询引用多个表时,就像在这种情况下一样,您可能会发现始终使用相应的表名称为列名添加前缀非常有用.这样,当您重新访问旧脚本时,您始终可以告诉哪个列属于哪个表,而无需查找引用的表的结构.此外,在省略表引用时必须包含表引用,这会导致列所属的表格不明确. (在这种情况下,引用id列而不引用posts表会产生不明确的情况,因为每个表都有自己的id.)
现在,当您在列名称之前写出完整的表名时,可能很难读取大而复杂的查询.这是(短)别名派上用场的地方:它们使查询更容易阅读和理解,虽然我已经知道并非所有人都有这种观点,所以你应该自己判断:this question包含两个版本的相同查询,一个具有长命名的表引用,另一个具有短名称的引用,以及一个意见(在对其中一个答案的评论中)为什么别名不适合.
无论如何,在这个特定查询中使用短表别名可能不如在一些更复杂的语句中那样有益.只是当查询引用多个表时,我习惯于对表进行别名.
This MySQL documentation article包含MySQL中别名表的官方语法(实际上与标准SQL中的相同).
内容总结
以上是互联网集市为您收集整理的MySQL:从另一个表中使用两个计数进行排序?全部内容,希望文章能够帮你解决MySQL:从另一个表中使用两个计数进行排序?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。