这是来自具有以下重点的学校作业:
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;
但无论出于何种原因,这项任务明确阻止我使用(我认为的)最适合工作的工具,而且我无法弄清楚如何做到这一点。
答案 0 :(得分:4)
没有聚合函数,没有分析函数,没有嵌套查询,适用于您可能获得的任何Oracle。 :)
select distinct name from tbl
where level = 3
connect by prior rowid < rowid and prior name = name and level < 4
答案 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
答案 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;