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 是正确的。