2013-03-06 32 views
13

Đối với bảng chứa hồ sơ của các trang web của người dùng đang truy cập hành vi, làm cách nào tôi có thể chọn người dùng truy cập nhiều hơn một trang web.người dùng chọn có nhiều hơn một bản ghi riêng biệt trong mysql

Cấu trúc của bảng này là:

userId  webpageId  visitTime 
    0    123   ... 
    0    124   ... 
    1    123   ... 
...    ...   ... 

tôi có thể đếm sử dụng:

SELECT userId, COUNT(DISTINCT webpageId) AS count FROM visits GROUP BY userId; 

Nó mang lại cho tôi kết quả như:

userId   count 
    0    2 
    1    1 
    2    6 
...    ... 

Làm thế nào tôi có thể thực thi truy vấn cho tôi kết quả cuối cùng như:

userId 
    0 
    2 
... 

từng là người dùng ghé thăm nhiều hơn một trang web DISTINCT

Trả lời

23

chỉ cần thêm có khoản

SELECT userId, COUNT(DISTINCT webpageId) AS count 
FROM visits 
GROUP BY userId 
HAVING COUNT(DISTINCT webpageId) > 1 

nhưng nếu bạn chỉ những gì ID

SELECT userId 
FROM visits 
GROUP BY userId 
HAVING COUNT(DISTINCT webpageId) > 1 

lý do tại sao bạn lọc theo mệnh đề HAVING chứ không phải trên WHERE là vì, mệnh đề WHERE không thể hỗ trợ các cột trong đó tổng hợp.

+0

chính xác! Nơi không làm việc cho GROUP, Có! – zoujyjs

+0

btw: Tôi có thể sử dụng bí danh 'đếm' trong mệnh đề HAVING không? – zoujyjs

+0

@zoujyjs yes 'HAVING' khoản hỗ trợ bí danh đã .. xem tại đây http://sqlfiddle.com/#!2/049e0/4 –

5

Hãy thử điều này:

SELECT userId, COUNT(DISTINCT webpageId) AS count FROM visits GROUP BY userId 
having COUNT(DISTINCT webpageId) > 1 

thêm: HAVING

+0

THX! hoạt động! – zoujyjs

2

Trong khi HAVING là một phương pháp tốt trong trường hợp này, hãy nhớ rằng các truy vấn có thể được lồng vào nhau:

SELECT userId, pageCount 
FROM (
    SELECT userId, COUNT(DISTINCT webpageId) AS pageCount 
    FROM visits 
    GROUP BY userId) AS n 
WHERE pageCount > 1 

Các kế hoạch truy vấn thực tế có thể khác biệt, đặc biệt nếu HAVING là một trường hợp được tối ưu hóa, nhưng không có lý do gì khiến các kế hoạch phải khác nhau. (So ​​sánh các kế hoạch trên RDBMS/phiên bản cụ thể nếu đó là vấn đề hoặc mối quan tâm.)

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