MySQL выбирает количество разных данных из одних и тех же таблиц Лучший подход

#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-й, потому что он будет выполняться только один раз и оптимизированным способом