SQLPlus - 获取没有聚合查询的记录数

时间:2015-02-13 22:05:41

标签: sql oracle

这是来自具有以下重点的学校作业:
1.没有嵌套查询
2.没有汇总查询

基本上我需要在表格中显示3次或更多次出现的所有名称。

例如,如果我的表格如下:

uniqueid |name | some other stuff
-----------------------
0        |Bob  | ...
1        |Bob  | ...
2        |Bob  | ...
3        |Tim  | ...
4        |Tim  | ...
5        |John | ...
6        |John | ...
7        |Bill | ...
8        |Tim  |

我想要的输出是:

name
-----
Bob 
Tim 

使用聚合查询这是微不足道的:

SELECT name
FROM table
GROUP BY name
HAVING COUNT(*) >= 3;

但无论出于何种原因,这项任务明确阻止我使用(我认为的)最适合工作的工具,而且我无法弄清楚如何做到这一点。

3 个答案:

答案 0 :(得分:4)

没有聚合函数,没有分析函数,没有嵌套查询,适用于您可能获得的任何Oracle。 :)

select distinct name from tbl 
where level = 3 
connect by prior rowid < rowid and prior name = name and level < 4

fiddle

答案 1 :(得分:0)

您可以使用ROW_NUMBER分析函数:

SELECT DISTINCT name
FROM( SELECT name
           , row_number() over (partition by name order by name ) as RN
      FROM tbl )
      WHERE RN > 2

SQLFiddle

答案 2 :(得分:0)

原来他们正在寻找的解决方案只是暴力破解:

SELECT DISTINCT t1.name
FROM table t1, table t2, table t3
WHERE t1.name = t2.name AND
t2.name = t3.name AND
t1.name = t3.name AND
t1.uniqueid <> t2.uniqueid AND
t2.uniqueid <> t3.uniqueid AND
t1.uniqueid <> t3.uniqueid;