sourcecode

정의되지 않은 행 선택

codebag 2023. 9. 5. 20:14
반응형

정의되지 않은 행 선택

정의되지 않은 행을 선택하는 방법은 무엇입니까?행 2가 3일 정의되지 않은 것과 같이 행 3이 1일 정의되지 않은 것입니다.나는 그들이 결과 집합에서 0이 되기를 원합니다.

+----+-----+-------+
| id | day | count |
+----+-----+-------+
|  1 |   1 |   262 |
|  1 |   2 |   685 |
|  1 |   3 |   984 |
|  2 |   1 |   692 |
|  2 |   2 |   962 |
|  3 |   2 |   355 |
|  3 |   3 |   741 |
+----+-----+-------+

편집: 선택합니다.count1일, 2일 및 3일(전체 테이블이 아님)부터 시작하여 정의되지 않은 날짜에 0을 표시합니다.

  • 우리는 모든 독특한 것을 얻을 수 있습니다.id값을 입력할 수 있습니다.
  • 위해서day당신은 1, 2, 3만을 원하는 것 같습니다.따라서 이러한 값은 다음을 사용하여 직접 고려할 수 있습니다.UNION ALL.
  • CROSS JOIN가능한 모든 조합을 얻기 위해 그들 사이에.
  • LEFT JOIN부터all_combinations에 대한 주요 테이블의 표.id그리고.day.
  • 우리는 사용할 수 있습니다.Coalesce()주 테이블에 일치하는 행이 없는 경우 카운트 값 0을 고려하는 함수

다음을 시도합니다.

SELECT all_combinations.id, 
       all_combinations.day, 
       COALESCE(t.count, 0) AS count 
FROM 
(
  SELECT ids.id, days.day 
  FROM
  (SELECT DISTINCT id FROM your_table) AS ids 
  CROSS JOIN 
  (SELECT 1 AS day UNION ALL SELECT 2 UNION ALL SELECT 3) AS days
) AS all_combinations 
LEFT JOIN your_table AS t
  ON t.id = all_combinations.id AND 
     t.day = all_combinations.day

결과:

| id  | day | count |
| --- | --- | ----- |
| 1   | 1   | 262   |
| 2   | 1   | 692   |
| 3   | 1   | 0     |
| 1   | 2   | 685   |
| 2   | 2   | 962   |
| 3   | 2   | 355   |
| 1   | 3   | 984   |
| 2   | 3   | 0     |
| 3   | 3   | 741   |

DB Fiddle에서 보기

언급URL : https://stackoverflow.com/questions/53267722/selecting-rows-that-are-not-defined

반응형