mysql 获取总计数,但排除某些条件

h43kikqp  于 2023-02-21  发布在  Mysql
关注(0)|答案(3)|浏览(158)

你好,我有这个表:

id | user_id | status
1  |  34     |  x
2  |  35     |  x
3  |  42     |  x
4  |  42     |  y

我的目标是计算状态为X的数据,除非用户有另一个状态为Y的数据,否则它将被排除在计算之外。因此,它将只计算2,而不是3,因为第3行有另一个状态为Y的数据,这是第4行。

SELECT * FROM logs
AND user_id NOT IN (SELECT user_id FROM logs WHERE status = 'y')
GROUP BY user_id;
dtcbnfnu

dtcbnfnu1#

我们可以尝试以下聚合方法:

SELECT COUNT(*) AS cnt
FROM
(
    SELECT user_id
    FROM logs
    GROUP BY user_id
    HAVING MIN(status) = MAX(status) AND
           MIN(status) = 'x'
) t;

上述逻辑仅对具有一个或多个状态仅为x的记录的用户进行计数。

of1yzvn4

of1yzvn42#

你可以这样做,我只在你sql上修改一点

SELECT COUNT(*) FROM (
    SELECT u_id FROM tbl WHERE u_id NOT IN
        (SELECT u_id FROM tbl WHERE status = 'y')
    GROUP BY u_id
) as t
unhi4e5o

unhi4e5o3#

可以使用内部联接:

SELECT
    count(t1.id) AS `cnt`
FROM
    `test` AS t1,
    `test` AS t2
WHERE
    t2.`status`='y'
    && t1.`user_id` != t2.`user_id`;

相关问题