2017-11-05 113 views
5

Tôi có một câu hỏi có sử dụng tuyên bố này DMLTôi có thể sử dụng những gì khác ngoài Group By?

SELECT SupplierID, COUNT(*) AS TotalProducts 
FROM Products 
GROUP BY SupplierID; 

Tôi đang cố gắng để có được những kết quả tương tự mà không sử dụng "Nhóm By". Tôi có thể sử dụng một biến bảng hoặc một bảng tạm thời, với Chèn và Cập nhật nếu cần. Ngoài ra, sử dụng Trong khi và IF-Khác được cho phép.

Tôi thực sự mất mọi trợ giúp sẽ tuyệt vời. Cảm ơn cộng đồng SO.

Điều này được sử dụng trong SQL Server. Cảm ơn một lần nữa.

+2

Tại sao các bạn cố gắng để tránh GROUP BY? –

Trả lời

6

Bạn luôn có thể sử dụng SELECT DISTINCT với các chức năng cửa sổ:

SELECT DISTINCT SupplierID, 
     COUNT(*) OVER (PARTITION BY SupplierId) AS TotalProducts 
FROM Products; 

Nhưng GROUP BY là đúng cách để viết một truy vấn tập hợp.

3

Bạn cũng có thể sử dụng các truy vấn sau đây:

select distinct P.SupplierID, (select count(*) from Products 
where SupplierID=P.SupplierID) TotalProducts from Products P 

Bạn sẽ nhận được kết quả tương tự bằng cách sử dụng truy vấn trên, nhưng tôi không nghĩ rằng tránh GROUP BY là một ý tưởng tốt!

2

Sử dụng một subquery:

SELECT DISTINCT SupplierID 
     ,(SELECT COUNT(*) 
      FROM Products P2 
     WHERE P2.SupplierID = P.SupplierID 
     ) AS TotalProducts 
    FROM Products P 

Các biệt là để loại bỏ các bản sao ... đếm thực hiện cho mỗi hàng như vậy mà không phân biệt bạn sẽ được lặp lại câu trả lời cho SupplierID.

1

Một cách khác

select distinct supplierId, p2.ttl 
from products p1 
cross apply 
(
    select count(*) 
    from products p2 
    where p1.supplierId = p2.supplierId 
) p2(ttl);