繁体   English   中英

如何编写使用同一表中列的 MIN() 值的 WHERE 子句?

[英]How to write a WHERE clause that uses the MIN() value of a column in the same the table?

我需要使用以下逻辑编写查询:

获取所有具有state = "active" 的行,具有retries < max_retries ,并且(从那些符合条件的行中)只返回retries最少的行。

我有这个查询:

SELECT * 
FROM users 
WHERE state = 'active' 
AND   retries < max_retries 
AND   retries = (SELECT MIN(retries) FROM users);

我的表:

+-----------------------------------------+  
| id   uid   retries  max_retries  state  |  
+-----------------------------------------+  
| 1   Jack     3          5        active |  
| 2   Jill     1          3        active |  
| 3   John     3          3        active |  
| 4   James    0          5        no     |  
| 5   Jim      2          7        no     |  
+-----------------------------------------+  

在这种情况下,我的查询应该返回包含Jill的行,因为 Jill 具有:state = active、retries < max_retries 和最小重试次数。

但是,我的尝试总是得到一些不正确的结果。 我看着 self join 和 union 等,但我似乎无法弄清楚如何解决它。

[编辑]:我想我现在想通了,但有人可以确认一下吗?

SELECT * 
FROM users
WHERE state = 'active'
AND  retries =(SELECT MIN(retries) FROM users WHERE retries < max_retries )

在主查询和子查询中添加statemax_enteies条件后,我现在达到了预期的结果。

SELECT 
    *
FROM
    users
WHERE
    state = 'active'
    AND retries < max_retries
    AND retries = (
        SELECT 
            MIN(retries)
        FROM
            users
        WHERE
            state = 'active'
            AND retries < max_retries
    )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM