Mysql琐碎的选择查询

时间:2017-10-30 13:25:26

标签: mysql select

我有下一个mysql表:

id | object_id | status

其中object_id不唯一,status为tinyint(-1或1)。

也就是说,对于一个对象,我可以有几个相同和/或不同的状态。

我想通过获取object_id,COUNT为正状态(作为pos)和COUNT为负状态(作为neg)进行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;

1 个答案:

答案 0 :(得分:4)

通过查看您的查询,我猜您正在尝试计算来自用户的负投票和正投票以及具有更多负投票数的返回用户。如果是这种情况,您可以使用以下查询

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子句进行此类操作