没有子查询的MySQL求和负值和正值求和

标签 mysql sql

我有两个表如下:

tbl_answers : id, (FK)authorID ...

tbl_answer_votes : id, (FK)voterID, (FK)answerID, vote (sInt, only ever -1 or 1) 

tbl_answerstbl_answer_votes 具有一对多关系,投票可以是负 1 或正 1。

我需要将 tbl_answer_votes 加入到 tbl_answers 中,但将对该答案的所有反对票的总和和对该答案的所有肯定票的总和作为两个单独的列.

我可以通过子查询来做到这一点,但因为它只是更大查询的一小部分,在阅读了子查询的陷阱之后,我想尝试从投票表中生成这两个负和正和作为尽可能高效。

最佳答案

您可以使用 CASEJOIN 来完成此操作:

SELECT 
  a.id, 
  SUM(CASE v.vote when 1 then 1 else 0 end) as UpVotes,
  SUM(CASE v.vote when -1 then 1 else 0 end) as DownVotes
FROM 
  tbl_answers a
INNER JOIN 
  tbl_answer_votes v
ON 
  v.id = a.id
GROUP BY 
  a.id

这会返回 tbl_answers 中的 ID 以及 tbl_answer_votes 中任一值的总票数的两列。您没有指定您希望从任一表中获得哪些(如果有的话)其他列,因此您可能必须调整 SELECTGROUP BY 中的列列表部分以添加额外的列。

关于没有子查询的MySQL求和负值和正值求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9041788/

相关文章:

php - MySQL 使用 PHP sprintf 插入到 NULL INT 列

sql - 如何在 SQL 中以特定日期格式预览日期 - 60 天?

java - Spring JdbcTemplate 无法从 MySQL 获取插入 ID

sql - PostgreSQL - 显示每个排序组的最后 N 行

mysql - 当没有 "having"子句时, "where"和 "group by"是否完全等价?

mysql - 如何解决 HAVING COUNT DISTINCT 附近的错误语法?

mysql - AWS 上 mariadb 的synch/mutex/aria/PAGECACHE::cache_lock 等待时间增加

mysql - 不同表上的简单触发器更新

mysql 工作台不能 : update where like

PHP登录重定向流程