Hàm COUNT(DISTINCT) rất hữu ích, tuy nhiên cũng khá tốn kém. Giống như COUNT(), nó lấy tất cả các phần tử, nhưng không dừng lại ở đó nó còn phải sắp xếp và đếm các phần tử không trùng lặp. Trong một số trường hợp bạn có thể tránh dùng hàm này mà vẫn đạt được mục đích. Ví dụ bạn cần tìm tất cả các khách hàng đã từng mua ít nhất hai loại sản phẩm khác nhau, câu lệnh dùng COUNT(DISTINCT) sẽ như thế này:
Bạn có thể dùng cách khác, hiệu quả hơn, như sau:
Khi khách hàng mua hai loại sản phẩm khác nhau, SanPham_ID phải khác nhau, do đó MIN(SanPham_ID) phải khác với MAX(SanPham_ID). Và việc tìm ra MIN và MAX của SanPham_ID đơn giản hơn nhiều so với việc phải đếm tất cả các sản phẩm khác nhau.
Trích từ: http://kenhdaihoc.com/forum/showthread.php?t=3089
SELECT KhachHang_ID
FROM dbo.BanHang
GROUP BY KhachHang_ID
HAVING COUNT(DISTINCT SanPham_ID) > 1
Bạn có thể dùng cách khác, hiệu quả hơn, như sau:
SELECT KhachHang_ID
FROM dbo.BanHang
GROUP BY KhachHang_ID
HAVING MIN(SanPham_ID) < MAX(SanPham_ID)
Khi khách hàng mua hai loại sản phẩm khác nhau, SanPham_ID phải khác nhau, do đó MIN(SanPham_ID) phải khác với MAX(SanPham_ID). Và việc tìm ra MIN và MAX của SanPham_ID đơn giản hơn nhiều so với việc phải đếm tất cả các sản phẩm khác nhau.
Trích từ: http://kenhdaihoc.com/forum/showthread.php?t=3089
Theo: sqlviet.com
No comments:
Post a Comment