sql - 如果重复,则获取一条记录

时间:2015-09-15 14:51:27

标签: sql

例如,我有一张这样的表。

+----+------+
| 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   |
+----+------+

我该怎么做?

2 个答案:

答案 0 :(得分:5)

id分组并使用max()获取I,因为I比按字母顺序E更好

select id, max(type) as type
from your_table
group by id

答案 1 :(得分:1)

这是我尝试更通用的解决方案,它不依赖于使用字母的词法排序。它明确计算每个I组中每个Eid的出现次数。当两个字母一起出现时,它会选择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