시도해 볼 수 있습니까? 나는 당신이 테이블에서 MAX (COUNT)를 쿼리 할 때 올바른 일을하고 있다고 생각한다. 그리고 가장 많은 수의 값을 반환한다고 생각한다.
select S.SupplierName, R.count
from Suppliers S
LEFT JOIN (
select SupplierName, count(SupplierName) as count
from
Products as p
inner join
Suppliers as s
on p.SupplierID = s.SupplierID
group by SupplierName
) R
ON R.SupplierName = S.SupplierName
ORDER BY S.SupplierName
그러나 원래 질문 인 경우 "가장 많이 구입 한 제품은 무엇입니까?", 나는이 쿼리를 사용하십시오 : 공급 업체의 공급 재료로서
SELECT p.productname, od.ProductId, SUM(Quantity)
FROM [OrderDetails] od
JOIN Products P
ON od.ProductId = P.productId
GROUP BY od.ProductId, P.Productname
ORDER BY SUM(Quantity) DESC
를하고, 판매 된 제품에 관련되지 않습니다. 고객은 구매자입니다. 그러나 질문은 가장 높은 수량으로 판매 된 제품의 유형에만 초점을 맞 춥니 다. 주문 세부 정보 표에서 찾을 수 있으며 제품 표와 결합하면 판매 된 모든 제품의 이름과 판매 된 수량을 지정할 수 있습니다 . 당신이 얻을 수 있도록합니다 - (SELECT TOP 1 ...
MSSQL에서 약간 다른) 1
SELECT P.SupplierId, S.SupplierName, COUNT(P.SupplierID)
FROM Products P
JOIN Suppliers S
ON S.SupplierId = P.SupplierId
GROUP BY P.SupplierId, S.SupplierName
ORDER BY COUNT(P.SupplierId) DESC
LIMIT 1
LIMIT :
는
UPDATE
그리고 대부분의 제품을 제공하는 공급 업체에 대한, 나는이 사용하는 거라고 최고의 결과. 그러나 공급 된 상품의 수가 동일한 공급 업체가있는 경우에는 최대 개수를 별도의 변수 또는 쿼리에 저장해야합니다.
SELECT S.SupplierName, t.TotalCount
FROM Suppliers S
JOIN
( SELECT P.SupplierId, S.SupplierName, COUNT(P.SupplierID) as TotalCount
FROM Products P
JOIN Suppliers S
ON S.SupplierId = P.SupplierId
GROUP BY P.SupplierId, S.SupplierName) t
ON t.SupplierId = S.SupplierId
JOIN
( SELECT SupplierId, SupplierName, MAX(TotalCount) as Maximum
FROM
(SELECT P.SupplierId, S.SupplierName, COUNT(P.SupplierID) as TotalCount
FROM Products P
JOIN Suppliers S
ON S.SupplierId = P.SupplierId
GROUP BY P.SupplierId, S.SupplierName) t2
) t3
ON t3.Maximum = t.TotalCount
WHERE t.TotalCount = t3.Maximum
ORDER BY t.TotalCount DESC
당신이 원래의 질문에 게시 한 바와 같이 기본적으로 동일하므로, : 이동하는 방법이 아닌 변수를 사용 W3 스쿨 주최하는 사이트로, 여기에 잘 같은 일을 할 수있는 쿼리입니다 도움이되지는 않습니다. : \ "실제 생활"의 예가 될 경우 쿼리를 약간 정리하는 데 도움이되는 변수를 도입 할 수 있습니다.기본적으로 위의 두 번째 조인에서 사용한 쿼리의 결과를 할당하고 where 절에서이 쿼리를 참조하기 만하면됩니다.
여기에 변수에 더있다 : 당신이 사용하고있는 DBMS http://dev.mysql.com/doc/refman/5.0/en/user-variables.html
SET @max = (SELECT MAX(TotalCount) as Maximum
FROM
( SELECT P.SupplierId, S.SupplierName, COUNT(P.SupplierID) as TotalCount
FROM Products P
JOIN Suppliers S
ON S.SupplierId = P.SupplierId
GROUP BY P.SupplierId, S.SupplierName) t);
SELECT S.SupplierName, t.TotalCount
FROM Suppliers S
JOIN
( SELECT P.SupplierId, S.SupplierName, COUNT(P.SupplierID) as TotalCount
FROM Products P
JOIN Suppliers S
ON S.SupplierId = P.SupplierId
GROUP BY P.SupplierId, S.SupplierName) t
ON t.SupplierId = S.SupplierId
WHERE t.TotalCount = @max
ORDER BY t.TotalCount DESC
? 포스트그레스? 신탁? –
"*하지만 이렇게하면 완전히 새로운 테이블을 만들 수 있습니다."- 예제에는 create table 문이 없습니다. 왜'select'가 새로운 테이블을 생성한다고 생각합니까? –
방금 데이터베이스를 보았습니다.'Products' 테이블에는 Supplier가 판매하는 제품을 나타내는'supplierID'가 들어 있습니다. 공급자가 어떤 제품을이 데이터베이스에 저장하지 않았는지에 대한 정보. –