2014-12-07 39 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

相關問題