我有两张桌子('帖子'和#39;投票'),允许用户投票赞成(评分为='投票')或在帖子上竖起大拇指(评分= 0'投票')。
我在查询中加入了两个表,并尝试过滤结果,以便一行只显示其是否有2+正(评级= 1)评级和2+负(评级= 0)评级来自'投票'表格(' post_id'和'评级'列)。
这就是我所得到的,但它并没有按预期工作,因为它带来的结果也只有1个正面和1个反面投票 - 尽管由于集合而无法看到这一点每个帖子的票数 - 这不是我想要的(' HAVING'行不按预期工作):
SELECT *, COUNT(*)
FROM posts p
JOIN votes v ON p.id = v.post_id
WHERE rating = 1 OR rating = 0
GROUP BY p.id
HAVING COUNT(rating = 1) > 1 AND COUNT(rating = 0) > 1
+----+---------+----------+----------+
| id | post_id | rating | COUNT(*) |
+----+---------+----------+----------+
| 4 | 4 | 0 | 2 |
| 7 | 7 | 0 | 2 |
| 9 | 9 | 0 | 2 |
| 83 | 83 | 1 | 2 |
+----+---------+----------+----------+
答案 0 :(得分:0)
我想你想要这个having
条款:
SELECT p.*, COUNT(*)
FROM posts p JOIN
votes v
ON p.id = v.post_id
WHERE rating IN (1, 0)
GROUP BY p.id
HAVING ABS(SUM(rating = 1) - SUM(rating = 0)) > 1;
编辑:
以上是正确的做法。 Here是一个显示结果的SQL小提琴。
编辑II:
我可能误解了这个问题。我理解这个问题是两票的 net 正面或两票的 net 否定。你似乎只想要至少两票。那个having
子句是:
HAVING SUM(rating = 1) > 1 or SUM(rating = 0) > 1