我有一个表pop
,它有3列:id
、level
、value
:
CREATE TABLE IF NOT EXISTS `pop` (
`id` int(6),
`level` varchar(3),
`value` int(6),
PRIMARY KEY (`id`,`level`)
) DEFAULT CHARSET=utf8;
INSERT INTO `pop` (`id`, `level`, `value`) VALUES
('1', 'MUN', '243'),
('1', 'CAN', '335'),
('1', 'PRO', '345'),
('2', 'DIS', '345'),
('2', 'MUN', '243'),
('3', 'DIS', '335');
大约有1000万个ID,只有4个级别.所有id都至少有1个级别.级别可以是"有序的",即使它们是字符串:("diss"<;"mun"<;"can"<;"pro").
我想实现的目标是:
- 对于每个id,请给我可能的最低级别及其值.
因此,预期输出为:
1,'MUN',243
2,'DIS',345
3,'DIS',335
我试过了
SELECT id,
CASE
when level = 'DIS' THEN level
when level = 'MUN' THEN level
when level = 'CAN' THEN level
when level = 'PRO' THEN level
END as level,
value FROM `pop` order by id, level
但它不起作用,它返回整个表.
有什么主意吗?
(顺便说一句,我在AWS Athena中使用SQL)