문제 : 여기COALESCE 함수는
CREATE TABLE Score(`id` int, `col1` INT NULL);
INSERT INTO Score
(`id`, `col1`)
VALUES
(2, NULL),
(3, 10),
(5, -1),
(7, NULL),
(11, NULL),
(13, -12),
(17, NULL),
(19, NULL),
(23, 1759);
http://sqlmag.com/t-sql/last-non-null-puzzle을 발견, 번호 순서에 따라 테이블에서 마지막 비 NULL 값을 찾을 수 있습니다
원하는 출력 : SQLFiddle에서
id col1 lastval
----------- ----------- -----------
2 NULL NULL
3 10 10
5 -1 -1
7 NULL -1
11 NULL -1
13 -12 -12
17 NULL -12
19 NULL -12
23 1759 1759
내 코드 MySQL 5.6
SELECT s1.id, COALESCE(s2.col1)
FROM score s1 JOIN score s2
ON s1.id >= s2.id
GROUP BY s1.id
ORDER BY s1.id, s2.id DESC
내가 이해하는대로 NULL이 아닌 첫 번째 값을 제공합니다. 목록. 그러나 모든 열에 대해 (null)
을 제공합니다. COALESCE
이 (가) 작동하지 않는 이유를 지적 할 수 있습니까? 또한 COALESCE
을 제거하면 GROUP BY
절이 s2.col1
열의 첫 번째 값을 반환하기 때문에 질문에 대답해야한다는 것을 알게되었습니다. 나는 틀릴지도 모른다.
SQL에서 사용자 정의 변수에 익숙하지 않습니다. 하지만 해결책을 찾았습니다. 당신은이 'SELECT s1.id를 작동하는 경우, (s2.id <= s1.id 및 s2.col1이 s2.id DESC LIMIT 1에 의해 NULL ORDER을지지 않습니다 점수 S2 로부터 s2.col1을 선택)을 확인할 수 있습니다 AS 값 FROM score s1 ORDER BY s1.id' –
두 번째 쿼리는 MySQL 사용자 변수를 사용하여 설명 할 수 있습니까? –