考试报名
考试报名
考试内容
考试大纲
在线客服
返回顶部

备考刷题,请到

CDA认证小程序

(复合题)数据库中有两个表,users 表中有 3 个字段 (user_id,user_name,create_at),orders 表中有 3 个字段 (order_id,user_id,amount)。 (2)运行以下 SQL 查询语句,哪句不会报错?
A. select user_id,avg(amount) from orders where avg(amount)>2000;
B. select user_id,avg(amount) from orders group by user_id where avg(amount)>2000;
C. select user_id,avg(amount) from orders where avg(amount)>2000 group by user_id;
D. select user_id,avg(amount) from orders group by user_id having avg(amount)>2000;
上一题
下一题
收藏
点赞
评论
题目解析
题目评论(0)

SQL 查询语句的书写顺序中,where 子句应该在 group by 子句之前,且where 子句中不能用聚合函数。

正确答案是:D: select user_id,avg(amount) from orders group by user_id having avg(amount)>2000;

### 分析:
1. **选项 A:**
```sql
select user_id, avg(amount) from orders where avg(amount) > 2000;
```
这条语句会报错。`avg(amount)` 是一个聚合函数,不能在 `WHERE` 子句中使用。`WHERE` 子句用于过滤行,而不是用于过滤聚合结果。

2. **选项 B:**
```sql
select user_id, avg(amount) from orders group by user_id where avg(amount) > 2000;
```
这条语句会报错。`WHERE` 子句不能跟在 `GROUP BY` 子句之后。用于过滤聚合结果的应该是 `HAVING` 子句。

3. **选项 C:**
```sql
select user_id, avg(amount) from orders where avg(amount) > 2000 group by user_id;
```
这条语句会报错。`avg(amount)` 是一个聚合函数,不能在 `WHERE` 子句中使用。正确的语法应该是在 `GROUP BY` 子句之后使用 `HAVING` 子句。

4. **选项 D:**
```sql
select user_id, avg(amount) from orders group by user_id having avg(amount) > 2000;
```
这条语句不会报错。`HAVING` 子句用于过滤聚合结果,在 `GROUP BY` 子句之后使用是正确的。

因此,选项 D 是正确的。