[SQL] 그룹 당 하나 개의 칼럼의 최대 값을 반환 행 [중복]
SQL그룹 당 하나 개의 칼럼의 최대 값을 반환 행 [중복]
나는 힘든 시간 최대 행을 잡아하고 해당 행에 대한 값을 잡기 위해 적어도 두 번 같은 테이블을 검색하지 않고이 일을 데. 문제의 표는이 받아 들일 수 있도록 매우 큽니다.
여기 내 테이블이 어떻게 보이는지입니다 :
SCORES
ID ROUND SCORE
1 1 3
1 2 6
1 3 2
2 1 10
2 2 12
3 1 6
나는 각 ID는 가장 최근의 라운드에서 가지고있는 점수를 반환해야합니다. 즉, 최대 (원형)와 행 있지만 최대 점수.
OUTPUT:
ID ROUND SCORE
1 3 2
2 2 12
3 1 6
지금은이 :
SELECT * FROM
(SELECT id, round,
CASE WHEN (MAX(round) OVER (PARTITION BY id)) = round THEN score ELSE NULL END score
FROM
SCORES
where id in (1,2,3)
) scorevals
WHERE
scorevals.round is not null;
이 작동하지만 (내가 수동으로 난 그냥 처음에 그 행을 잡아되지 할 수 있어야한다 이러한 행의 모든를 필터링해야합니다.) 매우 비효율적이다
올바른 값을 얻기 위해 내가 무엇을 할 수 있습니까?
해결법
-
==============================
1.이것은 부질없이 수도 있습니다 :
이것은 부질없이 수도 있습니다 :
SELECT DISTINCT id ,max(round) OVER (PARTITION BY id) AS round ,first_value(score) OVER (PARTITION BY id ORDER BY round DESC) AS score FROM SCORES WHERE id IN (1,2,3) ORDER BY id;
당신이 질문을 정확하게 돌려줍니다. 중요한 점은 별개가 윈도우 함수 후에 적용한다는 것입니다.
SQL 바이올린.
어쩌면 빠르게 두 번 같은 창을 사용하기 때문에 :
SELECT DISTINCT id ,first_value(round) OVER (PARTITION BY id ORDER BY round DESC) AS round ,first_value(score) OVER (PARTITION BY id ORDER BY round DESC) AS score FROM SCORES WHERE id IN (1,2,3) ORDER BY id;
그렇지 않으면 같은 일을.
-
==============================
2.당신은 분석 기능을 사용하여 올바른 궤도에있어. 그러나 당신은 아마 순위 기능이 뭔가를 원하는
당신은 분석 기능을 사용하여 올바른 궤도에있어. 그러나 당신은 아마 순위 기능이 뭔가를 원하는
SELECT * FROM (SELECT a.*, rank() over (partition by id order by round desc) rnk FROM scores WHERE id IN (1,2,3)) WHERE rnk = 1
관계가 아니라으로 모두 돌아보다 당신이 하나의 RNK을 가지고 임의로이 묶여 행 중 하나를 선택할 것 대신 등수의 ROW_NUMBER 분석 기능을 사용할 수 있습니다 (같은 아이디와 라운드를 행)가있을 경우 순위는 것.
당신은 MAX 분석 기능을 사용하고자한다면, 당신은 또한 같은 뭔가를 할 수
SELECT * FROM (SELECT a.*, MAX(round) OVER (partition by id) max_round FROM scores WHERE id IN (1,2,3)) WHERE round = max_round
-
==============================
3.문제의이 종류를 위해, 나는 최대 ... KEEP ... DENSE_RANK 구조를 사용하는 경향이 :
문제의이 종류를 위해, 나는 최대 ... KEEP ... DENSE_RANK 구조를 사용하는 경향이 :
select id, max(round) round, max(score) keep (dense_rank last order by round) score from tq84_scores group by id;
SQL 바이올린
from https://stackoverflow.com/questions/10342405/return-row-with-the-max-value-of-one-column-per-group by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] phpPgAdmin에서 PostgreSQL을 삽입 쿼리 구문 오류 (0) | 2020.04.16 |
---|---|
[SQL] SQL Server의 문자열 CONCAT 필드 값 (0) | 2020.04.16 |
[SQL] SELECT 절에서 여러 설정을 돌려주는 기능을위한 예상되는 동작은 무엇인가? (0) | 2020.04.16 |
[SQL] 어떻게 SQL에서 INSERT에 대한 중복 값을 피하기 위해? (0) | 2020.04.16 |
[SQL] 단지 MySQL의 쿼리를 사용하여 중복 제거? (0) | 2020.04.16 |