例如,我有一张这样的表。
+----+------+
| id | type |
+----+------+
| 1 | I |
| 2 | E |
| 4 | I |
| 4 | E |
| 5 | E |
| 6 | E |
| 7 | E |
| 8 | E |
| 8 | I |
+----+------+
我想要返回不同的ID,如果'我'和' E'两者都显示出使用'我'
+----+------+
| id | type |
+----+------+
| 1 | I |
| 2 | E |
| 4 | I |
| 5 | E |
| 6 | E |
| 7 | E |
| 8 | I |
+----+------+
我该怎么做?
答案 0 :(得分:5)
id
分组并使用max()
获取I
,因为I
比按字母顺序E
更好
select id, max(type) as type
from your_table
group by id
答案 1 :(得分:1)
这是我尝试更通用的解决方案,它不依赖于使用字母的词法排序。它明确计算每个I
组中每个E
和id
的出现次数。当两个字母一起出现时,它会选择I
,否则会选择相应的字母。
SELECT t.id AS 'id', CASE WHEN SUM(t.case_i) > 0 AND SUM(t.case_e) > 0 THEN 'I'
WHEN SUM(t.case_i) > 0 THEN 'I'
WHEN SUM(t.case_e) > 0 THEN 'E'
ELSE NULL
END AS 'type'
FROM
(
SELECT id, type,
CASE WHEN type='I' THEN 1 ELSE 0 END AS case_i
CASE WHEN type='E' THEN 1 ELSE 0 END AS case_e
FROM your_table
) t
GROUP BY t.id