我怎样才能得到最小的一行

时间:2011-03-30 23:21:20

标签: sql oracle

如何从生成的表中获取最小的行我的意思是生成的表,我将通过子查询生成一个表来计算记录,然后我将获得最小行。 换一种说法, 我正试图解决的问题 我有一个表:works_on,其中包含处理由pnumber识别的项目的员工的所有ssn 我想确定包含最小员工数量的项目的数量

先谢谢

3 个答案:

答案 0 :(得分:1)

MAX ... KEEP

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

答案 1 :(得分:1)

您可以尝试其他几种选择。

您可以尝试基于rownum的简单方法

select *
from (
  SELECT pnumber, count(*) cnt
  FROM works_on
  GROUP BY pnumber
  order by cnt
)
where rownum < 2

或使用RANK分析函数。 DENSE_RANKROW_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

答案 2 :(得分:0)

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

))