Задавайте вопросы, мы ответим
Вы не зашли.
Есть таблица cars_items (marka,model,checked)
Нужно выбрать уникальные модели, их количество и количество, где cheched = Yes
SELECT marka, model, count(model) as cnt,
(SELECT count(*) FROM cars_items as t2 WHERE marka = mt.marka AND model = mt.model AND checked = 'Yes') as checked
FROM cars_items as mt GROUP BY marka,model ORDER BY marka,model
Результат 133 записи
запрос занял 1.2541 сек. Это долго.
Профилирование говорит, что mysql сначала ищет (SELECT count(*)...... для ВСЕХ! машин в базе (около 10000),
а затем делает GROUP BY
Как выполнить подзапрос ПОСЛЕ GROUP BY ?
Отредактированно Microname (07.02.2011 13:08:21)
Неактивен
Никак, после группировки у Вас уже будут отсеянные данные ведь?
Я вижу два варианта:
1. два независимых запроса
SELECT marka, model, COUNT(*) FROM cars_items GROUP BY 1,2;
SELECT marka, model, COUNT(*) FROM cars_items WHERE checked = 'Yes' GROUP BY 1,2;
Понадобятся индексы на (marka, model) и, возможно, (checked, marka, model) — если
машинок checked немного.
2. Один запрос без индекса (зато однопроходный)
SELECT marka, model, SUM(IF(checked='Yes', 1, 0)), COUNT(*) FROM cars_items GROUP BY 1,2
Неактивен