问题是列出SUPPLIER_ID,供应商名称和每个供应商提供的产品数量。仅列出提供超过2种产品的产品。 [使用产品和供应商表]
SELECT S.SUPPLIER_ID, S.NAME, COUNT(S.PRODUCT_ID)
FROM PRODUCT P, SUPPLIER S
WHERE P.SUPPLIER_ID = S.SUPPLIER_ID
GROUP BY NAME;
SELECT SUPPLIER_ID, COUNT(PRODUCT_ID)
FROM SUPPLIER, PRODUCT
WHERE SUPPLIER.SUPPLIER_ID = PRODUCT.SUPPLIER_ID
GROUP BY NAME;
我尝试了两种方式,但他们不会工作。有什么问题?
答案 0 :(得分:2)
首先,学会使用正确的,明确的JOIN
语法。简单的规则:从不在FROM
子句中使用逗号; 始终使用显式JOIN
语法和ON
子句中的连接条件。
如果您正在学习SQL,这一点尤其重要。
其次,您的问题是SELECT
中的非聚合列不在GROUP BY
中。所以,我想这是你想要的查询:
SELECT S.SUPPLIER_ID, S.NAME, COUNT(S.PRODUCT_ID)
FROM PRODUCT P JOIN
SUPPLIER S
ON P.SUPPLIER_ID = S.SUPPLIER_ID
GROUP BY S.SUPPLIER_ID, S.NAME
HAVING COUNT(S.PRODUCT_ID) > 1;
您需要HAVING
条款以确保每个供应商至少有两种产品。
答案 1 :(得分:1)
您可以使用此查询
SELECT S.SUPPLIER_ID, S.NAME, COUNT(S.PRODUCT_ID)
FROM PRODUCT P, SUPPLIER S
WHERE P.SUPPLIER_ID = S.SUPPLIER_ID
GROUP BY S.SUPPLIER_ID, S.NAME;
基本上,如果要聚合列,则应在group by子句中提供select查询中的所有列
答案 2 :(得分:1)
试试这个:
SELECT S.SUPPLIER_ID, S.NAME, COUNT(S.PRODUCT_ID) COUNTER
FROM PRODUCT P, SUPPLIER S
WHERE P.SUPPLIER_ID = S.SUPPLIER_ID
GROUP BY S.SUPPLIER_ID,S.NAME
HAVING COUNT(*)>1;
答案 3 :(得分:0)
SELECT S.SUPPLIER_ID, S.NAME, COUNT(P.PRODUCT_ID)
FROM PRODUCT P JOIN
SUPPLIER S
ON P.SUPPLIER_ID = S.SUPPLIER_ID
GROUP BY S.SUPPLIER_ID, S.NAME
HAVING COUNT(*)>1;
;