MySQL:从一列中选择多个最大值

Ada*_*dam 1 mysql

假设我得到了这张表:

MYTABLE

+------+-------+
| type | count |
+------+-------+
| red  | 4     |
| blue | 3     |
| red  | 2     |
| blue | 7     |
+------+-------+
Run Code Online (Sandbox Code Playgroud)

现在我想要回来:

+--------+---------+
| maxRed | maxBlue |
+--------+---------+
| 4      | 7       |
+--------+---------+
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

这是我试过的

SELECT MAX(count) as maxRed, 0 as maxBlue FROM mytable WHERE type='red'

UNION

SELECT 0 as maxRed, MAX(count) as maxBlue FROM mytable WHERE type='blue'
Run Code Online (Sandbox Code Playgroud)

但它不是很有效,只有结果

+--------+---------+
| maxRed | maxBlue |
+--------+---------+
| 4      | 0       |
| 0      | 7       |
+--------+---------+
Run Code Online (Sandbox Code Playgroud)

sag*_*agi 7

为了使您的查询工作,您只需要用另一个查询包装它:

SELECT MAX(maxRed) as maxRed, MAX(maxBlue) as maxBlue
FROM(
    SELECT MAX(count) as maxRed, 0 as maxBlue FROM mytable WHERE type='red'
    UNION
    SELECT 0 as maxRed, MAX(count) as maxBlue FROM mytable WHERE type='blue') t
Run Code Online (Sandbox Code Playgroud)

更优雅的方式是条件聚合:

SELECT MAX(CASE WHEN t.type = 'red' THEN t.count END) as maxRed,
       MAX(CASE WHEN t.type = 'blue' THEN t.count END) as maxBlue
FROM mytable t
WHERE t.type IN('blue','red')
Run Code Online (Sandbox Code Playgroud)