Как получить общий счет без отчетливого? - PullRequest
0 голосов
/ 27 мая 2020

Вот скрипка

У меня есть таблица как

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     |
+---------+-----------------+-------+

1 Ответ

0 голосов
/ 28 мая 2020

Надеюсь, это поможет вам

    select tm.phase, count(tm.id) AS already_present, SUM(count(tm.id)) OVER() as total
    from table_main tm
    inner join table_error te on te.id = tm.id and te.phase = 'PHASE 3'
    group by tm.phase

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