为什么此表达式会导致SQL错误?

时间:2020-05-27 07:48:09

标签: sql

我正在学习SQL。一个任务是编写表达式

SELECT MIN(Price), ProductName 
FROM Products;

编辑器https://www.w3schools.com/sql/trysql.asp?filename=trysql_op_in并拍摄结果图像。

我的老师说这对他来说很好。当我这样做时,SQL返回

您试图执行不包含指定表达式'ProductName'作为聚合函数一部分的查询

我找到的答案包括更改程序的设置(无法执行)或执行尚未了解的操作。为什么该表达方式给我和我的老师带来不同的事情,我该怎么做才能改变呢?

4 个答案:

答案 0 :(得分:1)

避免将普通列与用于派生列的聚合函数混合。为了进行测试,您可以使用:

SELECT MIN(Price) AS PRICE 
FROM Products;

答案 1 :(得分:1)

因为您不能在未指定要如何分组的情况下为“产品名称”列分组许多不同的值。

您是否想获得SUM(ProductName)LIST(ProductNameAVG(ProductName)或其他东西?

您想要 与该ProductName做什么,您打算如何使用该列?

您可以将多个值fold (using term from functional programming)合并为一个

SELECT MIN(Price), MAX(ProductName) FROM Products

或者您应该将其指定为锚,将一组与其他组分开。

SELECT MIN(Price), ProductName 
FROM Products
GROUP BY ProductName

进行汇总时-查询的每一列都必须

  • 每个组的值都是唯一的,可以告诉相邻组中的一个组(然后应在GROUP BY子句中列出)
  • 或由您选择的汇总函数在每个值组中汇总(然后您应指定要使用的函数)

另一个问题是使用ProductName作为关键字段。

由于许多原因(至少三个),这通常是个坏主意。通常,您需要一个整数数字ID和一个单独的表,其中包含产品的每个synthetic ID的名称和其他属性

另请参阅:

答案 2 :(得分:1)

您的查询将在MySQL(旧版本)或SQLite中运行。但是,您不需要聚合查询。在这种情况下,Element.SendKeys("string" + Keys.Enter) const columns = useMemo(() => [ { name: 'Project Name', selector: 'name', sortable: true, }, { //Actions for every project cell: (row) => ( <ButtonGroup> {/* Button for deleting a specific project*/} <Button size='sm' onClick={deletetoggle}> Delete </Button> <Modal isOpen={deleteModal} toggle={deletetoggle}> <ModalHeader toggle={deletetoggle}>Delete Project</ModalHeader> <ModalBody>Are you sure to delete project {row.id}?</ModalBody> <ModalFooter> <Button size='sm' onClick={() => deleteProjectMethod(row.id)}> Delete </Button> <Button size='sm' onClick={deletetoggle}> Cancel </Button> </ModalFooter> </Modal> </ButtonGroup> ), }, ]); 做您想要做的事情:

ORDER BY

您的老师应该知道这一点,并且不应教授语法错误的内容。它不是SQL标准,因此不适用于大多数数据库。

因为LIMITSELECT p.Price, p.ProductName FROM Products p ORDER BY p.Price LIMIT 1; 子句不兼容,所以语法不正确-GROUP BY中有未聚合的列(我认为其他答案可以解释这一点)。

答案 3 :(得分:0)

很明显,您和您的老师具有不同的设置或数据库程序的不同版本。如果是我的sql。 MySQL提供了一个设置 ONLY_FULL_GROUP_BY 您可以在以下位置阅读更多内容 https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html关于如何根据您的需要进行设置。如果您无法更改设置,则可能无法解决。