Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 一个简单的分组_Sql_Oracle - Fatal编程技术网

Sql 一个简单的分组

Sql 一个简单的分组,sql,oracle,Sql,Oracle,问题是列出供应商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 W

问题是列出供应商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;

我试了两种方法,但都不管用。有什么问题

首先,学习使用正确、明确的
JOIN
语法。简单规则:在
FROM
子句中不要使用逗号;始终将显式
JOIN
语法与
ON
子句中的连接条件一起使用

如果您正在学习SQL,这一点尤其重要

其次,您的问题是在
SELECT
中有未聚合的列,这些列不在
groupby
中。我想这就是你想要的查询:

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
子句来确保每个供应商至少有两种产品。

首先,学习使用正确、明确的
连接语法。简单规则:在
FROM
子句中不要使用逗号;始终将显式
JOIN
语法与
ON
子句中的连接条件一起使用

如果您正在学习SQL,这一点尤其重要

其次,您的问题是在
SELECT
中有未聚合的列,这些列不在
groupby
中。我想这就是你想要的查询:

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
子句来确保每个供应商至少有两个产品。


您可以使用此查询

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;

基本上,如果要聚合列,则应在GROUPBY子句中提供select查询中的所有列


您可以使用此查询

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;
基本上,如果要聚合列,则应在GROUPBY子句中提供select查询中的所有列

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;
试试这个:

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;

与WHERE子句相比,使用联接提供了良好的持久性。因此,在有条件的情况下继续练习使用联接。感谢您对GROUPBY的解释。与WHERE子句相比,使用联接提供了良好的持久性。因此,请在有条件的情况下继续练习使用联接。感谢您对group by的解释。欢迎使用Stack Overflow!你可以通过解释它的工作原理来更好地回答这个问题。欢迎使用堆栈溢出!你可以通过解释它是如何工作的来更好地回答这个问题。另外,下次我将使用always join语法。谢谢。另外,下次我将使用always-join语法。非常感谢。