Запрос sql с вложенным подзапросом

116
23 апреля 2022, 01:10

Не получается правильно написать запрос, прошу помощи у знающих людей!

Задача: просчитать конкуренцию на конкретное место выставки. Входные данные: Таблица распределения мест на выставке. У меня есть id клиента. По нему я нахожу все выставки и места на них в которых он(клиент) участвовал.

SELECT `be`.`exhibition_id` AS `exhibition_id`, `be`.`place_num` AS `num_place`
                              FROM `b_exhibition` AS `be` 
                              WHERE `be`.`participant_id` = '749' ORDER BY `id` DESC

Получаю результат:

Дальше мне нужно, соответственно, каждой паре id_выставки и номер места найти суммарное количество участников на данном месте в этой конкретной выставке. По простому можно сделать так:

SELECT COUNT(DISTINCT (`id`)) AS `count` FROM `b_exhibition` WHERE `exhibition_id` = 142372 AND `place_num` = 3

Хотела оптимизировать в один запрос, чтобы посчитать всех участников по всем выставкам, которые вместе с моим клиентом участвовали:

SELECT COUNT(DISTINCT (`id`)) AS `count` FROM `b_exhibition` WHERE `exhibition_id` AND `num_place` IN 
(SELECT `be`.`exhibition_id` AS `exhibition_id`, `be`.`place_num` AS `num_place`
                              FROM `b_exhibition` AS `be` 
                              WHERE `be`.`participant_id` = '749' ORDER BY `id` DESC)

Но sql выдает ошибку, что нельзя в подзапросе два поля.

Потом думала в сторону UNION ALL, но я не могу заранее знать по каждому клиенту в скольки он выставках участвовал, только если получать количество участия и динамически формировать запрос в цикле.

Знающие люди, направьте, пожалуйста, в какую сторону правильнее думать при решении моей задачи

Answer 1

Для нескольких полей правильный синтаксис такой:

...
WHERE (`exhibition_id`, `place_num`) IN 
(SELECT `be`.`exhibition_id` AS `exhibition_id`,
        `be`.`place_num` AS `num_place`
         FROM `b_exhibition` AS `be` 
         WHERE `be`.`participant_id` = '749' ORDER BY `id` DESC)
READ ALSO
Выборка из двух таблиц в MySQL по запросу

Выборка из двух таблиц в MySQL по запросу

Нужна помощь c MySQLЕсть 2 таблицы

265
Неверные данные на выходе при запросе select(exists....)

Неверные данные на выходе при запросе select(exists....)

Что мешает грамотному чтению данных?

210
Запрос MYSQL используя 3 таблицы

Запрос MYSQL используя 3 таблицы

Имеется 3 таблицыХочу сделать выборку и подсчёт данных

101