【问题标题】:Mysql trivial select queryMysql琐碎选择查询
【发布时间】:2017-10-30 13:25:25
【问题描述】:

我有下一个 mysql 表:

id | object_id | status

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

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

我想进行 SELECT 查询,获取 object_id、正状态计数(作为 pos)和负状态计数(作为 neg)WHERE neg>pos;

我试过这个,但是我在使用条件从一个(vote) 中选择几个(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;

【问题讨论】:

标签: mysql select


【解决方案1】:

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

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

【讨论】:

  • 好吧,您可以在 OP 提供的上下文中。
  • 这是一个很好的正确答案。这是我的错 - 我在我的问题中使用了两种不同的模式(在表和查询中)
  • @Strawberry yup 在父查询中可以执行但不能在同一级别查询
猜你喜欢
  • 1970-01-01
  • 2011-06-26
  • 1970-01-01
  • 2011-09-18
  • 1970-01-01
  • 1970-01-01
  • 2021-11-19
  • 1970-01-01
  • 2017-06-13
相关资源
最近更新 更多