多个MAX()函数具有不同的条件

时间:2014-07-06 23:14:41

标签: mysql sql database performance

如何在满足条件时选择多个MAX()。

伪代码解释了我需要做什么

SELECT
  MAX(level, WHERE strength >= 100) m1,
  MAX(level, WHERE strength < 100) m2 
FROM players
WHERE premium_account = 1 

我需要子查询,还是有地方可以使用CASE WHEN? 我不想将它拆分成单独的查询,因为我的“主”查询过滤了许多不必要的行,并将搜索限制为整个表的小子集。

该表非常大,拥有大约13M的行并占用6GB的磁盘空间。

2 个答案:

答案 0 :(得分:3)

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 

答案 1 :(得分:2)

你可以做到

MAX(IF(strength >= 100, level, 0))

如有必要,用较低的数字替换0。