2011-07-21 146 views
12

什麼是sql查詢找到重複記錄並以降序顯示,根據最高計數和id顯示記錄。sql查詢找到重複記錄

例如:

得到計數可以

select title, count(title) as cnt from kmovies group by title order by cnt desc 

來完成,結果會是怎樣

title cnt 

ravi 10 
prabhu 9 
srinu 6 
什麼是現在的查詢得到的結果類似下面

ravi 
ravi 
ravi 
...10 times 
prabhu 
prabhu..9 times 
srinu 
srinu...6 times 
+0

什麼RDBMS好嗎? – gbn

回答

16

如果您的RDBMS支持OVER子句.. 。

SELECT 
    title 
FROM 
    (
    select 
     title, count(*) OVER (PARTITION BY title) as cnt 
    from 
     kmovies 
    ) T 
ORDER BY 
    cnt DESC 
+0

感謝百萬它運作良好.. – Tan

0

你不能做它作爲一個簡單的單查詢,但這次會做:

select title 
from kmovies 
where title in (
    select title 
    from kmovies 
    group by title 
    order by cnt desc 
    having count(title) > 1 
) 
+1

這不會給出正確的結果,因爲不會按COUNT(*)順序降序重複行。這不是*最外層* ORDER BY,所以order是arbritrary。還有其他兩個答案,一個查詢解決方案 – gbn

5

您可以在單個查詢做到這一點:

Select t.Id, t.title, z.dupCount 
From yourtable T 
Join 
    (select title, Count (*) dupCount 
    from yourtable 
    group By title 
    Having Count(*) > 1) z 
    On z.title = t.Title 
order By dupCount Desc 
1
select distinct title, (
       select count(title) 
       from kmovies as sub 
       where sub.title=kmovies.title) as cnt 
from kmovies 
group by title 
order by cnt desc 
3

此查詢使用Group By,並和Having子句允許您選擇(LOC吃和列出)每個重複的記錄。 As子句很方便,指的是和Order By子句中的Quantity,但實際上並不是讓您獲得重複行的一部分。

Select 
    Title, 
    Count(Title) As [Quantity] 
    From 
    Training 
    Group By 
    Title 
    Having 
    Count(Title) > 1 
    Order By 
    Quantity desc