Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.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
从MySQL转换为PostgresSQL时,group by中出现子查询错误_Mysql_Sql_Postgresql_Group By - Fatal编程技术网

从MySQL转换为PostgresSQL时,group by中出现子查询错误

从MySQL转换为PostgresSQL时,group by中出现子查询错误,mysql,sql,postgresql,group-by,Mysql,Sql,Postgresql,Group By,我正在将我的数据库从MySQL转换为PostgresSQL,我有一个查询,它试图按给定位置最便宜和最流行的价格对产品进行排序。它在MySQL中运行良好,但在Postgres中,我遇到了这个查询的问题: SELECT products.product_id, suppliers.supplier_id, product_code.desc_fa, products.name_fa, MIN(product_supplier.price) AS

我正在将我的数据库从MySQL转换为PostgresSQL,我有一个查询,它试图按给定位置最便宜和最流行的价格对产品进行排序。它在MySQL中运行良好,但在Postgres中,我遇到了这个查询的问题:

SELECT products.product_id,
       suppliers.supplier_id,
       product_code.desc_fa,
       products.name_fa,
       MIN(product_supplier.price) AS price,
       SUM(COALESCE(orders.quantity, 0)) AS n_orders
FROM products
JOIN product_code ON product_code.code_id = products.code_id
JOIN product_supplier ON product_supplier.product_id = products.product_id
JOIN suppliers ON suppliers.supplier_id = product_supplier.supplier_id
JOIN product_tags ON product_tags.product_id = products.product_id
JOIN tags ON tags.tag_id = product_tags.tag_id
JOIN product_crop ON product_crop.product_id = products.product_id
JOIN crops ON crops.crops_id = product_crop.crop_id
LEFT JOIN orders
    ON orders.product_id = products.product_id and orders.crop_id = product_crop.crop_id
LEFT JOIN user ON user.user_id = orders.user_id and user.location_id = 883
WHERE crops.crops_id = 1
  AND product_supplier.quantity >= 3
  AND tags.tag = 'علف کش'
GROUP BY products.name_fa 
ORDER BY n_orders DESC
LIMIT 10;
它给了我这个错误:

column must appear in the GROUP BY clause or be used in an aggregate function 
对如何解决这个错误有什么建议吗

更新: 根据答案,我可以使用以下查询使其正常工作:

WITH tem_1 AS (SELECT product_id, MIN(price) AS price FROM product_supplier GROUP BY product_id) ,
     tem_2 AS (SELECT product_id, SUM(quantity) AS n_orders FROM orders Group by product_id)
SELECT products.product_id, suppliers.supplier_id, product_code.desc_fa, products.name_fa, tem_1.price, 
products.telegraph, suppliers.location_id, COALESCE(tem_2.n_orders,0) AS quant FROM products
INNER JOIN product_supplier ON product_supplier.product_id = products.product_id
INNER JOIN suppliers ON suppliers.supplier_id = product_supplier.supplier_id
INNER JOIN product_code ON product_code.code_id = products.code_id
INNER JOIN product_crop ON product_crop.product_id = products.product_id
INNER JOIN crops ON crops.crops_id = product_crop.crop_id
INNER JOIN product_tags ON product_tags.product_id = products.product_id
INNER JOIN tags ON tags.tag_id = product_tags.tag_id
INNER JOIN tem_1 ON tem_1.price = product_supplier.price AND tem_1.product_id = products.product_id
LEFT JOIN tem_2 ON tem_2.product_id = products.product_id
WHERE crops.crops_id = 1 AND product_supplier.quantity >= 3 AND tags.tag = 'علف کش'
ORDER BY quant DESC
LIMIT 10;;

但由于我对SQL相当陌生,我想知道我的代码是否正确,或者是否有更好的方法来实现它?

当您使用聚合函数(如SUM、MIN和其他)时,字段列表中没有聚合函数的其他列必须包含在GROUP BY子句中

这些字段:

products.product_id,
suppliers.supplier_id,
product_code.desc_fa,
products.name_fa
必须在
分组依据中

相反,您的
GROUP BY
子句只有以下字段:

products.name_fa 
您必须添加其他缺少的3个字段

MySql
中,默认情况下已关闭此错误,因此您的查询工作正常,但在其他DBMS中,您会遇到错误


您可以看到如何设置MySql环境中的
分组依据
行为

您对该错误有什么不理解?该查询在MySql上运行不正常,它会给出或多或少的随机结果。(除非在兼容模式下,否则在较新版本上会出现错误。)任何没有聚合函数的非常量字段都需要位于“分组依据”中。我知道并非所有DMB都需要此功能,但这让我感到困惑。我有不同的供应商以不同的价位销售同一产品,此外,某些产品在特定地点比其他产品更受欢迎。例如,我们有产品A和产品B,根据已经售出的数量,产品A比产品B更受欢迎,对于产品A,我们有3个供应商。我希望我的查询首先显示该位置产品A的最便宜卖家,然后是产品B的最便宜卖家。但是如果我添加GROUP BY suppliers.supplier\u id,它将显示该产品的所有3个供应商,而不是一个!那么我应该如何达到我想要的结果呢?@PouriaMazandarani:请发布你的数据集和你想要的结果集。因此,出于您的目的,您可以使用子查询,但是如果您发布数据集和结构,我可以帮助您我能够获得我想要的结果,我发布了新代码问题,这个新查询正确吗?