Страницы

Поиск по вопросам

пятница, 21 июня 2019 г.

left join подсчитать значения

SELECT p.* FROM poll p LEFT JOIN poll_answer a ON p.id_poll = a.id_poll LEFT JOIN poll_answer_user au ON au.id_poll = p.id_poll WHERE `archive` = 1 AND `hide` = 0 OR `enddate` < CURDATE()
Нужно подсчитать кол-во совпадений, при склейки poll_answer_user и добавить новый столбец вывода с кол-во совпадений.


Ответ

Если я правильно понимаю, вы хотите посчитать количество ответивших пользователей для каждого опроса. Буквально так:
SELECT id_poll, COUNT(*) AS cnt FROM poll_answer_user GROUP BY id_poll
Чтобы добавить поля из таблицы "опросы", используем это как под-запрос:
SELECT p.*, IFNULL(gau.cnt, 0) AS cnt FROM poll AS p LEFT JOIN ( SELECT id_poll, COUNT(*) AS cnt FROM poll_answer_user GROUP BY id_poll ) AS gau USING(id_poll) WHERE p.`archive` = 1 AND (p.`hide` = 0 OR p.`enddate` < CURDATE())
Кстати, будте осторожны с сочетанием AND и OR. Если не учитывать приоритет операций, можно получить неожиданный результат. Скобки укажут что именно требуется.

Комментариев нет:

Отправить комментарий