我有下一个 mysql 表:
id | object_id | status
其中 object_id
不是唯一的并且 status
是 tinyint(-1 或 1)。
也就是说,对于一个对象,我可以有多个相同和/或不同的状态。
我想通过获取 object_id、正状态计数(作为 pos)和负状态计数(作为负)进行 SELECT 查询 WHERE neg>pos;
我试过了,但是我在使用条件从一个(投票)中选择几个(vote_up 和 vote_down)列时遇到问题
SELECT * FROM (
SELECT object_id, COUNT(status) as (IF(status>0,'status_up','status_down'))
FROM object_statuses GROUP BY object_id;
) WHERE status_up<status_down;
最佳答案
通过查看您的查询,我猜您是在尝试计算来自用户的反对票和赞成票,并返回拥有更多反对票的用户。如果是这种情况,您可以使用以下查询
SELECT object_id,
sum(status = 1) status_up,
sum(status = -1) status_down
FROM object_statuses
GROUP BY object_id
HAVING status_up < status_down
您不能使用 WHERE
子句对聚合结果执行过滤,而是使用 HAVING
子句进行此类操作
关于Mysql简单的选择查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47016419/