Thứ Sáu, 6 tháng 4, 2012

Vì sao không nên dùng Hàm COUNT(DISTINCT)


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:

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

0 nhận xét:

Đăng nhận xét