2014-12-07 38 views
0

Oracle查询我怎样才能在Oracle显示的计数()柱记录的最大/最小

select 
    courses.name, 
    count(gardener) 
from 
    attendances 
    join courses using (course) 
group by 
    courses.name 
order by 
    count(gardener) asc 

输出

╔═══════════╦═════════════════╗ 
║ NAME ║ COUNT(GARDENER) ║ 
╠═══════════╬═════════════════╣ 
║ Harvesting║    3 ║ 
║ Planting ║    3 ║ 
║ Gardening ║    4 ║ 
╚═══════════╩═════════════════╝ 

如何可以只显示的最小/最大,甚至平均计数。例如。最小

// I just want to display the courses with minimum count 
╔═══════════╦═════════════════╗ 
║ NAME ║ COUNT(GARDENER) ║ 
╠═══════════╬═════════════════╣ 
║ Harvesting║    3 ║ 
║ Planting ║    3 ║ 
╚═══════════╩═════════════════╝ 

我试图

select 
max(cnt), -- min(cnt) and avg(cnt) doesnt seem to work 
name 
from 
(
    select 
    courses.name, 
    count(gardener) as cnt 
    from 
    attendances 
    join courses using (course) 
    group by 
    courses.name 
    order by 
    count(gardener) asc 
) 
group by 
    name 

我得到无效的标识符 “CNT”。我尝试使用max(cnt)它也给了我相同的标识符错误,任何人都可以纠正我的语法,并建议我做错了请或者建议一种不同的方式来做到这一点?

编辑:我删除了语音标记,但仍然显示所有记录,而不仅仅是最大值count()记录,因为我需要。

回答

0

如果你想用最小计数的课程,我会建议分析功能:

select name, cnt 
from (select c.name, count(gardener) as cnt, 
      dense_rank() over (order by count(gardener)) as seqnum 
     from attendances a join 
      courses c 
      using (course) 
     group by c.name 
    ) ca 
where seqnum = 1; 
+0

非常感谢你,会考虑一下。 – 2014-12-07 01:53:16

0

除去双引号,然后再试

+0

谢谢,我删除语音标记和现在的识别误差不见了。我添加了“select max(cnt),name”+“group by name”,它仍然显示所有其他记录,我只需要显示最高计数值记录。 – 2014-12-07 01:31:08

相关问题