2011-07-18 88 views
18

Làm cách nào để kết hợp chính xác câu lệnh này.Cách kết hợp GROUP BY, ORDER BY và HAVING

SELECT *, COUNT(*) 
FROM user_log 
GROUP BY Email 
ORDER BY UpdateDate DESC 
HAVING COUNT(*) > 1 

Hãy cho tôi biết

+0

chung GROUP BY tip: "Nếu một mệnh đề GROUP BY được chỉ định, mỗi tham chiếu cột trong danh sách SELECT phải xác định một cột nhóm hoặc là đối số của một đặt chức năng. " – jarlh

Trả lời

42

ORDER BY luôn là cuối cùng ...

Tuy nhiên, bạn cần phải chọn trường nào mà bạn thực sự muốn sau đó chỉ chọn những người và nhóm của họ. SELECT *GROUP BY Email sẽ cung cấp cho bạn RANDOM VALUES cho tất cả các trường nhưng Email. Hầu hết các RDBMS thậm chí sẽ không cho phép bạn làm điều này vì các vấn đề nó tạo ra, nhưng MySQL là ngoại lệ.

SELECT Email, COUNT(*) 
FROM user_log 
GROUP BY Email 
HAVING COUNT(*) > 1 
ORDER BY UpdateDate DESC 
+2

+1 điểm tốt về MySQL và GROUP BY –

+0

(Khi bạn có 'GROUP BY'), cùng một logic áp dụng cho tất cả các trường bạn đặt trong danh sách' SELECT', mệnh đề 'HAVING' và mệnh đề' ORDER BY' . Vì vậy, nó cũng áp dụng cho 'ORDER BY UpdateDate'. Trừ khi 'UpdateDate' phụ thuộc vào 'Email', bạn sẽ nhận được một thứ tự khá ngẫu nhiên. –

-2

Các bước để Sử dụng Group bởi, Có Bằng và Sắp xếp theo ...

Select Attitude ,count(*) from Person 
group by person 
HAving PersonAttitude='cool and friendly' 
Order by PersonName. 
+0

Quy tắc GROUP BY chung là: "Nếu mệnh đề GROUP BY được chỉ định, mỗi tham chiếu cột trong danh sách SELECT phải xác định cột nhóm hoặc là đối số của hàm được đặt" – jarlh

-1

Mã của bạn nên chứa WHILE trước group byhaving:

SELECT Email, COUNT(*) 

FROM user_log 

WHILE Email IS NOT NULL 

GROUP BY Email 

HAVING COUNT(*) > 1 

ORDER BY UpdateDate DESC 
+1

Dán bản sao đẹp: P –