Скажем, у меня есть клиенты, которым могут быть присуждены определенные призы:
SELECT gs.claimed_by AS consumer_id, p.prize_id AS prize_id FROM
awarded_prizes
И прямо сейчас, у клиента 1 есть три приза, а у клиента 2 - один приз
+-------------+----------+
| consumer_id | prize_id |
+-------------+----------+
| 1 | 45 |
| 1 | 46 |
| 1 | 47 |
| 2 | 66 |
+-------------+----------+
Скажем, у нас также есть коллекции, и если вы соберете всех участников этого предмета коллекционирования, у вас теперь есть коллекционный набор:
SELECT set_id, member_prize_id AS prize_id FROM collectable_set_members;
+--------+----------+
| set_id | prize_id |
+--------+----------+
| 1 | 45 |
| 1 | 46 |
| 1 | 47 |
| 2 | 65 |
| 2 | 66 |
+--------+----------+
Используя приведенную выше таблицу и предыдущий запрос, мы видим, что клиент 1 выполнил набор 1 один раз (у него 45, 46, 47), а клиент 2 ничего не выполнил.
Существуют случаи, когда клиент может выполнить набор несколько раз (клиент может иметь 45, 46, 47, 45, 46, 47 в таблице won_prize.
Я смотрел на проблему кладовая и ее варианты (например, проблему бармена), играл с перекрестными соединениями и группировками и, похоже, не могу найти то, что я хочу.
Я пытаюсь получить результат для данного клиента, показывая все set_ids, которыми они владеют, и количество выполненных им наборов:
+-------------+---------------+--------+
| consumer_id | completed_set | count |
+-------------+---------------+--------+
| 1 | 1 | 1 |
+-------------+---------------+--------+
Я на mariadb: 5,5