SQLPlus-获取不带聚合查询的记录数
这是一份学校作业,上面有以下命令:SQLPlus-获取不带聚合查询的记录数,sql,oracle,Sql,Oracle,这是一份学校作业,上面有以下命令: 1.没有嵌套查询 2.没有聚合查询 基本上,我需要获得在一个表中出现3次或更多次的所有名称 例如,如果我的表格如下所示: uniqueid |name | some other stuff ----------------------- 0 |Bob | ... 1 |Bob | ... 2 |Bob | ... 3 |Tim | ... 4 |Tim | ... 5
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;
但无论出于何种原因,该作业明确禁止我使用(我认为是)最适合该工作的工具,我也不知道该如何完成。您可以使用
行数
分析功能:
SELECT DISTINCT name
FROM( SELECT name
, row_number() over (partition by name order by name ) as RN
FROM tbl )
WHERE RN > 2
您可以使用
行数
分析功能:
SELECT DISTINCT name
FROM( SELECT name
, row_number() over (partition by name order by name ) as RN
FROM tbl )
WHERE RN > 2
没有聚合函数,没有分析函数,没有嵌套查询,适用于您可能获得的任何Oracle。:)
从tbl中选择不同的名称
其中级别=3
按先前的rowid连接
没有聚合函数,没有分析函数,没有嵌套查询,适用于您可能获得的任何Oracle。:)
从tbl中选择不同的名称
其中级别=3
按先前的rowid连接
结果证明,他们正在寻找的解决方案是对其进行暴力:
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;
选择DISTINCT t1.name
来自表t1、表t2、表t3
其中t1.name=t2.name和
t2.name=t3.name和
t1.name=t3.name和
t1.uniqueid t2.uniqueid和
t2.uniqueid t3.uniqueid和
t1.uniqueid t3.uniqueid;
结果证明,他们正在寻找的解决方案就是对其进行暴力:
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;
选择DISTINCT t1.name
来自表t1、表t2、表t3
其中t1.name=t2.name和
t2.name=t3.name和
t1.name=t3.name和
t1.uniqueid t2.uniqueid和
t2.uniqueid t3.uniqueid和
t1.uniqueid t3.uniqueid;
表是否有唯一键?是的,有唯一键表是否有唯一键?是的,有唯一键在添加另一个名为“tim”的行后重试。您的意思可能是“rn=3”\@beherenow:只需添加distinct
就足够了。请在添加另一行名为“tim”后再试。您的意思可能是“rn=3”\@beherenow:只需添加distinct
就足够了。其他答案值得考虑。其他答案值得考虑。