2010-02-19 28 views
8

Tôi nhận thấy đây có thể là một cách dễ dàng, nhưng SQL của tôi là cơ bản nhất.Cách đếm các nhóm hàng và hiển thị trên cùng/dưới cùng 3

Cho phép nói rằng tôi có một bảng chứa danh sách đơn đặt hàng, với item_id là một trong các cột. Tôi cần hiển thị 3 đơn đặt hàng phổ biến nhất (hoặc 3 phổ biến nhất).

Tôi biết rằng tôi cần nhóm các đơn đặt hàng bằng cách sử dụng item_id và sau đó đếm chúng. Sau đó, tôi cần phải hiển thị dưới cùng (hoặc trên cùng) 3 theo thứ tự giảm dần (hoặc tăng dần). Tôi không hoàn toàn chắc chắn làm thế nào để xây dựng một truy vấn như thế.

+0

Anh ngữ của tôi là không đủ cho tôi hiểu "3 lệnh phổ biến nhất của mặt hàng". Chỉ tôi thôi à? – Quassnoi

+0

Không chỉ bạn. Tôi nghĩ rằng OP có nghĩa là một cái gì đó giống như: "Tôi cần phải hiển thị ba mặt hàng đặt hàng nhất." – bernie

+1

Chào mừng bạn đến với StackOverflow. –

Trả lời

10

Trong Sql Server:

SELECT TOP 3 item_id, COUNT(*) as itemcount 
FROM table 
GROUP BY item_id ORDER BY itemcount 

Và thêm DESC để đặt hàng gốc

3
select item_id, count(*) 
from table 
group by item_id; 

sẽ cung cấp cho bạn toàn bộ danh sách.

dưới 3:

select item_id 
from (
    select item_id, count(*) as cnt 
    from table 
    group by item_id 
    order by cnt 
) where rownum < 4; 

Top 3:

select item_id 
from (
    select item_id, count(*) as cnt 
    from table 
    group by item_id 
    order by cnt desc 
) where rownum < 4; 

LƯU Ý: sytnax này là dành cho Oracle. Sử dụng LIMIT nếu bạn có MySql hoặc TOP nếu bạn có sql-server.

ORDER BY sẽ sắp xếp kết quả của bạn. Thứ tự tăng dần là mặc định, vì vậy hãy sử dụng 'desc' nếu bạn muốn nhận được giá trị lớn nhất.

GROUP BY (khi được sử dụng với count (*)) sẽ tính nhóm đối tượng tương tự

nơi rownum < 4: Đây là thầy mo đã làm một LIMIT. Nó trả về 3 hàng đầu tiên của truy vấn đã được chạy. Các mệnh đề được chạy trước mệnh đề thứ tự, vì vậy đó là lý do tại sao bạn phải thực hiện điều này như một truy vấn lồng nhau.

+0

Tại sao downvote không có bình luận? –

+0

@quassnoi: chúng tôi đã chỉnh sửa nó cùng một lúc: Tôi đã cuộn các chỉnh sửa của bạn trở lại, sau đó đưa chúng vào vị trí của tôi để văn bản tôi thêm vào sẽ ở đó. –

2

Trong MySQL:

SELECT item_id, COUNT(*) AS cnt 
FROM orders 
GROUP BY 
     item_id 
ORDER BY 
     cnt DESC 
LIMIT 3 
3

Đối với SQL server:

select top 3 item_id, count(item_id) 
from  table 
group by item_id 
order by count(item_id) desc 

sẽ cung cấp cho bạn

item_id 3 phổ biến nhất bằng cách sử dụng:

order by count(item_id) 

sẽ cung cấp cho bạn 3 tối thiểu p opular item_id của

+0

Câu trả lời này là gì? –

+0

@David: 'SQL Server' – Quassnoi

Các vấn đề liên quan