sql查询使用group by怎么做

时间:2014-02-09 23:52:21

标签: sql

我有一个表详细信息,其中包含以下值

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

请帮我这样做 感谢

1 个答案:

答案 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;