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

时间:2017-10-23 08:55:50

标签: mysql sql subquery

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

获取state =“有效”的所有行,其中包含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&lt; max_retries和最小重试次数。

但是,我的尝试总会得到一些不正确的结果。 我看了自我加入和联盟等,但我似乎无法弄清楚如何解决它。

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

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

1 个答案:

答案 0 :(得分:1)

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
    )