2012-09-02 45 views
75

Làm cách nào để tìm giá trị thường xuyên nhất trong một cột nhất định trong bảng SQL?Tìm giá trị thường xuyên nhất trong cột SQL

Ví dụ, đối với bảng này nó sẽ trả về two vì nó là giá trị thường gặp nhất:

one 
two 
two 
three 
+1

GROUP BY phiên bản: http://stackoverflow.com/questions/344665/get-most-common-value-in-sql –

Trả lời

107
SELECT  `value`, 
      COUNT(`value`) AS `value_occurrence` 
    FROM  `my_table` 
    GROUP BY `value` 
    ORDER BY `value_occurrence` DESC 
    LIMIT 1; 
+0

Tôi nên làm gì nếu tôi cũng muốn chọn một trường khác từ 'my_table'? Nói cách khác, một giá trị khác; – grep

+4

điều gì sẽ xảy ra nếu nhiều hơn một giá trị xuất hiện giống nhau không có thời gian (tối đa)? Trong trường hợp này, nếu ba cũng xuất hiện hai lần? LIMIT 1 sẽ chỉ hiển thị một bản ghi – mustafa1993

+0

@ mustafa1993 'SELECT * TỪ my_table GROUP BY value ORDER BY count (*) DESC;' –

27

Hãy thử một cái gì đó như:

SELECT  `column` 
    FROM  `your_table` 
    GROUP BY `column` 
    ORDER BY COUNT(*) DESC 
    LIMIT 1; 
+3

Tôi không biết rằng bạn có thể sử dụng 'COUNT (*)' trực tiếp trong 'ORDER BY'. Tôi biết có một vài hạn chế về 'GROUP BY' /' HAVING' và các cột tổng hợp và tôi luôn giả định rằng nó sẽ không hoạt động. –

2

Để sử dụng với SQL Server.

Vì không có hỗ trợ lệnh giới hạn trong đó.

Yo có thể sử dụng 1 lệnh hàng đầu để tìm giá trị xảy ra tối đa trong cột cụ thể trong trường hợp (giá trị) này

SELECT top1 
    `value`, 
    COUNT(`value`) AS `value_occurrence` 
FROM  
    `my_table` 
GROUP BY 
    `value` 
ORDER BY 
    `value_occurrence` DESC; 
+0

Bạn cũng cần phải di chuyển COUNT chức năng để ORDER BY phần để tránh nhận được lỗi sau: Chỉ có thể chỉ định một biểu thức trong danh sách lựa chọn khi truy vấn phụ không được giới thiệu với EXISTS –

9

Chúng ta hãy xem xét tên bảng như tblperson và tên cột như city. Tôi muốn lấy lại thành phố lặp lại nhiều nhất từ ​​cột thành phố:

select city,count(*) as nor from tblperson 
     group by city 
      having count(*) =(select max(nor) from 
      (select city,count(*) as nor from tblperson group by city) tblperson) 

Đây nor là tên bí danh.

0

Nếu bạn không thể sử dụng LIMIT hoặc LIMIT không phải là tùy chọn cho công cụ truy vấn của bạn. Bạn có thể sử dụng "ROWNUM" thay vào đó, nhưng bạn sẽ cần một truy vấn phụ:

SELECT FIELD_1, ALIAS1 
FROM(SELECT FIELD_1, COUNT(FIELD_1) ALIAS1 
    FROM TABLENAME 
    GROUP BY FIELD_1 
    ORDER BY COUNT(FIELD_1) DESC) 
WHERE ROWNUM = 1 
+0

MySQL không có 'ROWNUM' – Barmar

+0

Đây là hợp lệ cho oracle nhưng không mysql – Prabhu

+1

@Prabhu trong MySQL, bạn sử dụng 'LIMIT 1' thay thế; cú pháp được hiển thị trong câu trả lời được chấp nhận. – ToolmakerSteve

1

Giả Bảng là 'SalesLT.Customer' và cột bạn đang cố gắng tìm ra là 'CompanyName' và AggCompanyName là một Alias.

Select CompanyName, Count(CompanyName) as AggCompanyName from SalesLT.Customer 
group by CompanyName 
Order By Count(CompanyName) Desc; 
4

Dưới truy vấn dường như làm việc tốt cho tôi trong SQL cơ sở dữ liệu Server:

select column, COUNT(column) AS MOST_FREQUENT 
from TABLE_NAME 
GROUP BY column 
ORDER BY COUNT(column) DESC 

Kết quả:

column   MOST_FREQUENT 
item1   highest count 
item2   second highest 
item3   third higest 
.. 
.. 
Các vấn đề liên quan