【发布时间】:2011-03-30 23:21:19
【问题描述】:
如何从生成的表中获取最小行我的意思是生成表,我将通过子查询生成一个表来计算记录,然后我将获得最小行。
换句话说,我要解决的问题
我有一个表:works_on,其中包含从事 pnumber 标识的项目的员工的所有 ssn
我想确定包含最少员工人数的项目的 pnumber
【问题讨论】:
如何从生成的表中获取最小行我的意思是生成表,我将通过子查询生成一个表来计算记录,然后我将获得最小行。
换句话说,我要解决的问题
我有一个表:works_on,其中包含从事 pnumber 标识的项目的员工的所有 ssn
我想确定包含最少员工人数的项目的 pnumber
【问题讨论】:
最大...保持
SELECT MAX( pnumber) KEEP (DENSE_RANK FIRST ORDER BY cnt DESC)
FROM
(SELECT pnumber, count(*) cnt
FROM works_on
GROUP BY pnumber)
如果您有多个具有相同最小值的项目,它会变得有点复杂。
SELECT pnumber FROM works_on
GROUP BY pnumber
HAVING COUNT(*) =
(SELECT MAX( cnt) max_cnt
FROM
(SELECT pnumber, count(*) cnt
FROM works_on
GROUP BY pnumber))
【讨论】:
您可以尝试其他几个选项。
您可以尝试基于 rownum 的简单方法
select *
from (
SELECT pnumber, count(*) cnt
FROM works_on
GROUP BY pnumber
order by cnt
)
where rownum < 2
或使用RANK 解析函数。 DENSE_RANK 和 ROW_NUMBER 函数的工作方式相似(但每个函数略有不同。
SELECT *
FROM (
SELECT pnumber, cnt, rank() over (order by cnt) as my_rank
from (
SELECT pnumber, count(*) cnt
FROM works_on
GROUP BY pnumber
)
)
WHERE my_rank = 1
【讨论】:
select * from (
select pnumber , count (pnumber)counter from works_on
group by pnumber
)
where counter=(select min(counter) from (select pnumber , count (pnumber)counter from works_on
group by pnumber
))
【讨论】: