Вот скрипка
У меня есть таблица как
TABLE_MAIN
+-----+----------+---------+
| id | name | phase |
+-----+----------+---------+
| 101 | Bolt | PHASE 1 |
| 102 | Nut | PHASE 1 |
| 103 | Screw | PHASE 2 |
| 104 | Hex BOLT | PHASE 2 |
| 105 | Rubber | PHASE 3 |
| 106 | Aluminum | PHASE 3 |
| 107 | Slate | PHASE 3 |
| 108 | Pen | PHASE 3 |
| 109 | Pencil | PHASE 3 |
+-----+----------+---------+
TABLE_ERROR
+-----+----------+---------+
| id | name | phase |
+-----+----------+---------+
| 101 | Bolt | PHASE 1 |
| 102 | Needle | PHASE 1 |
| 101 | Bolt | PHASE 3 |
| 102 | Needle | PHASE 3 |
| 104 | Bolt | PHASE 3 |
| 105 | Rubber | PHASE 3 |
| 105 | Plastic | PHASE 3 |
| 106 | Aluminum | PHASE 3 |
| 106 | Steel | PHASE 3 |
| 106 | Cooper | PHASE 3 |
+-----+----------+---------+
Теперь я пытаюсь найти, сколько раз ID PHASE 3
в table_error
появляется в table_main
для каждой фазы. Если идентификатор повторяется, он должен быть добавлен к общему количеству.
Ожидается
+---------+-----------------+-------+
| phase | already_present | total |
+---------+-----------------+-------+
| PHASE 1 | 2 | 8 |
| PHASE 2 | 1 | 8 |
| PHASE 3 | 5 | 8 |
+---------+-----------------+-------+
Я пробовал
SELECT phase, count(*) AS already_present, sum(count(*)) OVER () AS total
FROM table_main
WHERE id IN (
SELECT id
FROM table_error
WHERE phase = 'PHASE 3'
)
GROUP BY phase
Но это дает мне,
+---------+-----------------+-------+
| phase | already_present | total |
+---------+-----------------+-------+
| PHASE 1 | 2 | 5 |
| PHASE 2 | 1 | 5 |
| PHASE 3 | 2 | 5 |
+---------+-----------------+-------+