Выбор строк, которые не определены - PullRequest
0 голосов
/ 12 ноября 2018

Как выбрать строки, которые не определены? Как и в строке 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 |
+----+-----+-------+

EDIT: Я хочу выбрать count в дни 1, 2 и 3 (не всю таблицу) и отображать 0 в неопределенный день.

1 Ответ

0 голосов
/ 12 ноября 2018
  • Мы можем получить все уникальные значения 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   |

Просмотр на БД Fiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...