2014-03-28 2 views
1

나는 다음과 같은 쿼리가 : 마지막 값의 값입니다단일 쿼리가 행을 반환하는 가장 많은

statement one | 1 | 3 
statement two | 1 | 3 
statement three | 0.5 | 4 
statement four | 0.5 | 4 

:

SELECT statement, value, level 
FROM records 
WHERE user_id=10 AND value IS NOT NULL and disabled IS NULL 

그것은 아래의 예와 같은 결과를 반환합니다 레벨 필드에서 가장 높은 숫자 값에 대한 결과 만 선택하려고합니다. 그래서이 경우 가장 높은 숫자는 4입니다. 따라서 문장 3과 4의 결과를 반환하고 싶습니다.

먼저 가장 높은 숫자를 쿼리 한 다음 AND level=4 구문을 포함하는 다른 쿼리를 작성하는 것이 좋습니다.

단일 SQL 쿼리로 처리 할 수 ​​있는지 궁금합니다.

+0

''statement' * 당 가장 높은'level' * 또는 전체적으로 가장 높은'level'을 조건으로 사용 하시겠습니까? 그리고 쿼리에서 다른 조건을 적용하기 전 * 또는 * 후에 가장 높은 수준 *. –

답변

1
with max_level as (
    select max(level) as max_level 
    from records 
) 
select statement, "value", level 
from records 
where 
    user_id = 10 and 
    "value" is not null and 
    disabled is null and 
    level = (select max_level from max_level) 
1

당신은 hightest level 찾을 rank()을 사용할 수

SELECT statement, value, level 
FROM (SELECT statement, value, level, RANK() OVER (ORDER BY level DESC) AS rk 
     FROM records 
     WHERE user_id = 10 AND value IS NOT NULL AND disabled IS NULL) 
WHERE rk = 1 
0

이것은 overall 가장 높은 값 조건으로 level을 사용합니다.

SELECT statement, "value", level 
FROM records 
WHERE user_id = 10 
AND "value" IS NOT NULL 
AND disabled IS NULL 
AND level = (SELECT max(level) FROM records); 

이것은 기본적으로 Clodoaldo's answer의 단순화입니다. 하위 쿼리 식은 단일 값을 반환하기 때문에 괜찮습니다.

이 예제에서는 결과로을 level의 가장 높은 값인 을 조건으로 사용합니다. Mureinik's answer에는이를위한 우아한 솔루션이 있습니다.

겨우 : valuereserved word in standard SQL입니다. Postgres에서 허용되는 경우에도 식별자로 사용하지 않는 것이 좋습니다.

관련 문제