#mysql #database
#mysql #База данных
Вопрос:
я пытаюсь получить количество значений в одной таблице, но в другом предложении where. Какой из них лучше всего подходит для этого
SELECT * FROM
(SELECT COUNT(id) FROM table WHERE post_id = 123 AND action_type IN(1,3,7,9,10)) as 'a',
(SELECT COUNT(id) FROM table WHERE post_id = 123 AND action_type IN(2,7,8,18)) as 'b'
или
SELECT COUNT(id) FROM table WHERE post_id = 123 AND action_type IN(1,3,7,9,10)
SELECT COUNT(id) FROM table WHERE post_id = 123 AND action_type IN(2,7,8,18)
Примечание: таблица содержит миллионы значений
Комментарии:
1. мне немного непонятно, почему вы считаете с условием
WHERE id = 123
— если ваше поле id уникально, результат подсчета может быть только один или ноль. если он не уникален, то он, по крайней мере, имеет запутанное имя.2. @FranzGleichmann это еще один столбец.. я редактирую вопрос
3. ах. теперь с внешним ключом это имеет гораздо больше смысла, спасибо за разъяснение
4. @FranzGleichmann Спасибо за ваше время.
Ответ №1:
Вы можете использовать условную агрегацию, чтобы получить данные в одном запросе без подзапросов:
SELECT COUNT(CASE WHEN action_type IN(1,3,7,9,10) THEN id END) AS count_1,
COUNT(CASE WHEN action_type IN(2,7,8,18) THEN id END) AS count_2
FROM table
WHERE id = 123
Ответ №2:
1-й, потому что он будет выполняться только один раз и оптимизированным способом