Процент в одном запросе SQL - PullRequest
3 голосов
/ 08 января 2011

В настоящее время у меня есть два почти идентичных запроса SQL, которые я использую для своей базы данных SQLITE3.

Найти общее количество подходящих записей.

SELECT COUNT(runner.id)
FROM entry
JOIN runner ON runner.entry_id = entry.id
JOIN race ON race.id = entry.race_id
JOIN horse ON horse.id = entry.horse_id
WHERE STRFTIME('%Y-%m-%d', race.datetime) < :max_date AND
STRFTIME('%Y-%m-%d', race.datetime) >= :min_date AND
entry.trainer_id = :trainer_id AND
race.course_id = :course_id AND
race.type = :race_type

Найти общее количество подходящих записей, где x = y.

SELECT COUNT(runner.id)
FROM entry
JOIN runner ON runner.entry_id = entry.id
JOIN race ON race.id = entry.race_id
JOIN horse ON horse.id = entry.horse_id
WHERE STRFTIME('%Y-%m-%d', race.datetime) < :max_date AND
STRFTIME('%Y-%m-%d', race.datetime) >= :min_date AND
entry.trainer_id = :trainer_id AND
race.course_id = :course_id AND
runner.position = 1 AND
race.type = :race_type

Затем я вычисляю процент от x = y записей в коде PHP. Как бы я сделал то же самое, возвращая процент от одного SQL-запроса?

РЕДАКТИРОВАТЬ: Что касается оптимизации, я только что переключил условия WHERE в более нормальный порядок, и добавил некоторые индексы, и это снизилось с 17 до 0,1 секунд.

1 Ответ

1 голос
/ 08 января 2011

Запустите ваш первый запрос и измените выбор на:

SUM(CASE WHEN runner.position = 1 THEN 1 ELSE 0 END) as position1Count, COUNT(runner.id) as total

Затем разделите postionCount на сумму в PHP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...