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?
Ví dụ: đối với bảng này, nó sẽ trả về two
vì nó là giá trị thường xuyên nhất:
one
two
two
three
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?
Ví dụ: đối với bảng này, nó sẽ trả về two
vì nó là giá trị thường xuyên nhất:
one
two
two
three
Câu trả lời:
SELECT `column`,
COUNT(`column`) AS `value_occurrence`
FROM `my_table`
GROUP BY `column`
ORDER BY `value_occurrence` DESC
LIMIT 1;
Thay thế column
và my_table
. Tăng 1
nếu bạn muốn xem các N
giá trị phổ biến nhất của cột.
SELECT * FROM my_table GROUP BY value ORDER BY count(*) DESC;
WHERE 'value_occurrence' = 1
?
HAVING
thay vì WHERE
trong trường hợp này.
Hãy thử một cái gì đó như:
SELECT `column`
FROM `your_table`
GROUP BY `column`
ORDER BY COUNT(*) DESC
LIMIT 1;
COUNT(*)
trực tiếp trong ORDER BY
. Tôi biết có một vài hạn chế liên quan đến GROUP BY
/ HAVING
và cột tổng hợp và tôi luôn cho rằng điều đó sẽ không hoạt động.
Chúng ta hãy coi tên bảng là tblperson
và tên cột là city
. Tôi muốn truy xuất 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à một tên bí danh.
Truy vấn dưới đây dường như hoạt động tốt đối với tôi trong cơ sở dữ liệu SQL 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
..
..
Để sử dụng với SQL Server.
Vì không có hỗ trợ lệnh giới hạn trong đó.
Bạn có thể sử dụng lệnh trên cùng 1 để tìm giá trị xuất hiện lớn nhất trong cột cụ thể trong trường hợp này (giá trị)
SELECT top1
`value`,
COUNT(`value`) AS `value_occurrence`
FROM
`my_table`
GROUP BY
`value`
ORDER BY
`value_occurrence` DESC;
Giả sử Bảng là ' SalesLT.Customer
' và Cột bạn đang cố gắng tìm ra là ' CompanyName
' và AggCompanyName
là Bí danh.
Select CompanyName, Count(CompanyName) as AggCompanyName from SalesLT.Customer
group by CompanyName
Order By Count(CompanyName) Desc;
Nếu bạn không thể sử dụng LIMIT hoặc LIMIT không phải là một tùy chọn cho công cụ truy vấn của bạn. Thay vào đó, bạn có thể sử dụng "ROWNUM", 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
ROWNUM
LIMIT 1
thay thế; cú pháp được hiển thị trong câu trả lời được chấp nhận.
Nếu bạn có một cột ID và bạn muốn tìm danh mục lặp lại nhiều nhất từ một cột khác cho mỗi ID thì bạn có thể sử dụng truy vấn bên dưới,
Bàn:
Truy vấn:
SELECT ID, CATEGORY, COUNT(*) AS FREQ
FROM TABLE
GROUP BY 1,2
QUALIFY ROW_NUMBER() OVER(PARTITION BY ID ORDER BY FREQ DESC) = 1;
Kết quả: