第六条语句在SQL-Sever中为何会报错
时间: 2023-11-28 13:48:16 浏览: 98
很抱歉,我之前的回答有误。第六条语句在 SQL Server 中会报错,因为在 SQL Server 中,HAVING 子句只能使用聚合函数,而不能使用非聚合函数或表达式。如果需要对非聚合函数或表达式进行过滤,可以将其移动到 WHERE 子句中。正确的语句应该是:
```
SELECT category_id, SUM(quantity) AS total_quantity
FROM sales
WHERE year = 2021
GROUP BY category_id
HAVING SUM(quantity) > 100;
```
相关问题
为什么GRANT SELECT ON Student TO user3 WHERE Sdept='CS';还是会在SQL-Sever中出错
这个 SQL 语句有一个语法错误。在 SQL 中,GRANT 语句用于授予用户或角色某些权限,但是它不能被用于过滤查询结果。如果你想要授权给 user3 访问 Student 表中 Sdept='CS' 的行,则需要使用以下 SQL 语句:
```
GRANT SELECT ON Student(Sname, Sage, Sdept) TO user3
WHERE Sdept='CS';
```
这个语句将授予 user3 对 Student 表中 Sdept='CS' 的行的 Sname、Sage 和 Sdept 列的 SELECT 权限。请注意,你需要授予 SELECT 权限的具体列名,而不是整个表。
但是这样写在SQL sever中会报错啊
非 GROUP BY 子句中的列,必须在聚合函数中使用或者在 GROUP BY 子句中列出。这是 SQL 的语法要求,不符合语法规则,SQL Server 确实会报错。对于不需要分组的列,可以将其作为 SELECT 子句的一部分,但不要包含在 GROUP BY 子句中。因此,正确的 SQL 查询语句应该是这样的:
```
SELECT customer_id, order_id, order_date, SUM(order_total) as total_order
FROM orders
GROUP BY customer_id, order_id, order_date
```
这里将所有需要查询的列都列出,并且将 customer_id 列作为 GROUP BY 子句的一部分,以便按照 customer_id 进行分组。
阅读全文