Mysql简单的选择查询

标签 mysql select

我有下一个 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/

相关文章:

mysql - Double <> ANY 查询不适用于第二个 <>ANY

mysql - 在mysql中,有没有办法在使用*后不显示列,例如排除以下列?

mysql - 多个 NOT EXISTS SQL

c# - 包含 2 个数据库的 SQL 查询

php - SQL SUM 来自列的值并除以行数

javascript - 将 Map<String, Set<String>> 从 Servlet 传递到 JSP Select

sql - 如何从 JSONB 列中提取数据

Mysql递归查询获取父类别

php - 闻起来像 AJAX 但我不确定

php - MySQL 错误 `ON DUPLICATE KEY UPDATE`