2011-07-21 65 views
12

truy vấn sql để tìm các bản ghi trùng lặp và hiển thị trong giảm dần, dựa trên số cao nhất và id hiển thị các bản ghi là gì.truy vấn sql để tìm các bản ghi trùng lặp

ví dụ:

việc tính có thể được thực hiện với

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

và kết quả sẽ như thế nào

title cnt 

ravi 10 
prabhu 9 
srinu 6 

nay là truy vấn để có được kết quả như dưới đây là những gì:

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

RDBMS làm gì? – gbn

Trả lời

16

Nếu RDBMS của bạn hỗ trợ các khoản VỀ .. .

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

cảm ơn một triệu nó đã làm việc tuyệt vời .. – Tan

0

Bạn không thể làm điều đó như một truy vấn đơn đơn giản, nhưng điều này sẽ làm:

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

Điều này sẽ không cung cấp kết quả chính xác vì không lặp lại các hàng trong COUNT (*) theo thứ tự giảm dần. Điều này là không * ngoài cùng * ORDER BY để trật tự là arbritrary. Và có 2 câu trả lời khác với một giải pháp truy vấn duy nhất – gbn

5

Bạn có thể làm điều đó trong một truy vấn duy nhất:

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

truy vấn này sử dụng Group By và và Having khoản để cho phép bạn chọn (loc ăn và liệt kê) cho mỗi bản ghi trùng lặp. Mệnh đề As là một sự thuận tiện để tham khảo Quantity trong các mệnh đề selectOrder By, nhưng không thực sự là một phần trong việc đưa bạn các hàng trùng lặp.

Select 
    Title, 
    Count(Title) As [Quantity] 
    From 
    Training 
    Group By 
    Title 
    Having 
    Count(Title) > 1 
    Order By 
    Quantity desc 
Các vấn đề liên quan