假设我得到了这张表:
MYTABLE
Run Code Online (Sandbox Code Playgroud)+------+-------+ | type | count | +------+-------+ | red | 4 | | blue | 3 | | red | 2 | | blue | 7 | +------+-------+
现在我想要回来:
Run Code Online (Sandbox Code Playgroud)+--------+---------+ | maxRed | maxBlue | +--------+---------+ | 4 | 7 | +--------+---------+
我怎样才能做到这一点?
这是我试过的
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)
但它不是很有效,只有结果
Run Code Online (Sandbox Code Playgroud)+--------+---------+ | maxRed | maxBlue | +--------+---------+ | 4 | 0 | | 0 | 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)
| 归档时间: |
|
| 查看次数: |
409 次 |
| 最近记录: |