我有一个表详细信息,其中包含以下值
**id name locale code**
1 Zen GR 101
2 Ryan IN 105
3 Rico GR 101
4 Susan GR 101
5 Tom AU 106
6 John AU 107
7 Lis AU 107
我需要选择代码数大于2的所有行。并尝试使用此查询
select *
from Details
group by code
having count(code)>2
返回结果:
1 Zen GR 101
6 John AU 107
但我想要这个:
1 Zen GR 101
3 Rico GR 101
4 Susan GR 101
6 John AU 107
7 Lis AU 107
请帮我这样做 感谢
答案 0 :(得分:3)
通用SQL方法是使用in
运算符:
select *
from Details d
where d.code in (select code
from Details
group by code
having count(code) > 2
) ;
还有其他的编写方式,具体取决于数据库(有些可能比特定数据库中的执行速度更快)。
编辑:
在许多数据库中执行此操作的一个好方法是使用窗口/分析函数:
select id, name, locale, code
from (select d.*, count(*) over (partition by code) as codecnt
from details d
) d
where codecnt > 1;