#mysql #sql #database #performance
#mysql #sql #База данных #Производительность
Вопрос:
Как я могу выбрать несколько функций MAX (), но только при выполнении условий.
Псевдокод, который объясняет, что мне нужно сделать
SELECT
MAX(level, WHERE strength >= 100) m1,
MAX(level, WHERE strength < 100) m2
FROM players
WHERE premium_account = 1
Нужен ли мне подзапрос или есть место для использования CASE WHEN
?
Я не хочу разбивать его на отдельные запросы, потому что мой «главный» запрос фильтрует множество ненужных строк и ограничивает поиск небольшим подмножеством всей таблицы.
Таблица очень большая, содержит около 13 миллионов строк и занимает 6 ГБ дискового пространства.
Ответ №1:
Использовать CASE
внутри MAX
SELECT
MAX(CASE WHEN strength >= 100 THEN level END) m1,
MAX(CASE WHEN strength < 100 THEN level END) m2
FROM players
WHERE premium_account = 1
Ответ №2:
Вы можете сделать
MAX(IF(strength >= 100, level, 0))
При необходимости замените 0 меньшим числом.