2017-07-13 44 views
0

我希望根據自己的條件獲取最少的記錄條數我在哪裏條件下給出。如何在oracle中獲取條件的最小記錄數

爲前:我有兩列(ID,價值)

我的表具有數據像以下的表:

Id Value 
1 001 
2 001 
3 001 
4 002 
5 002 
6 003 
7 004 
8 004 
9 004 
10 004 

從上面的表格值 '001' 具有3點的ID(1 ,2,3)和值'002'有2等等。

現在我想確定具有最小Ids的值(例如,在這個例子中,它應該是值爲'003'且只有一個ID)。

如何在Oracle中爲此編寫查詢。?

在此先感謝。

+0

您是否試過選擇語句 –

+0

如果有兩個或更多的值與最少的id綁定,那麼期望的結果是什麼?如果你添加一行'Id = 11'和'Value ='005'',那麼值'003'和'005'都只有一個Id。選擇他們兩個?只選擇其中的一個(如果是這樣,哪一個?任意一個,隨機?)你是否還需要知道有多少個ID是最小值,例如在你的情況下計數爲1? – mathguy

+0

哪個版本的Oracle? – trincot

回答

1

以下查詢將選擇行數最低的值(或值)。在關係的情況下,選擇具有相同的最小行數的所有值。行數不顯示,但它可以很容易地顯示(將其添加到外部select)。

真正的工作是在聚合子查詢中完成的。除了行數和計數之外,我們還計算分析函數min(count(*)) - 整個聚合結果,因此分析子句實際上是空的:over()

select value 
from (
     select value, count(*) as cnt, min(count(*)) over() as min_cnt 
     from  your_table 
     group by value 
     ) 
where cnt = min_cnt 
+0

謝謝mathguy,..這符合我的目的 – Santosh

1

您可以通過計數使用GROUP BY,爲了最後選擇第一行

SELECT * FROM (
    SELECT value, count(*) as cnt 
    FROM sometable 
    GROUP BY value 
    ORDER BY count(*) 
) WHERE ROWNUM = 1 

sqlfiddle:http://sqlfiddle.com/#!4/e5f075/1

1

如果你是在甲骨文12,你可以這樣做:

select value, count(*) 
from  mytable 
group by value 
order by 2 
fetch first 1 rows only 

如果您需要擁有所有共享最小計數的值,請將onlywith ties