Несколько функций MAX () с разными условиями для каждой

#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 меньшим числом.