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

备考刷题,请到

CDA认证小程序

场景:现MySQL数据库中有一张支付信息表pay_fact,一共有5个字段,字段属性如下:支付日期date ,城市varchar(10),用户ID char(5),订单ID char(5),支付金额int(8),其中,一个用户可以下多笔订单,订单ID为标识码。计算城市名称为Dubai且支付金额大于60的支付用户数和支付总金额()(多选)
A. select count(用户ID) as 支付用户数,sum(支付金额) as 支付总金额 from pay_fact where 城市=”Dubai” and 支付金额>60;
B. select count(distinct 用户ID) as 支付用户数,sum(支付金额) as 支付总金额 from pay_fact where 城市=”Dubai” and 支付金额>60;
C. select count(用户ID) as 支付用户数,sum(支付金额) as 支付总金额 from pay_fact having 城市=”Dubai” and 支付金额>60;
D. select count(distinct用户ID) as 支付用户数,sum(支付金额) as 支付总金额 from pay_fact where 支付金额>60 group by 城市 having 城市=”Dubai”;
上一题
下一题
收藏
点赞
评论
题目解析
题目评论(0)

在分析这个问题时,我们需要计算满足特定条件的支付用户数和支付总金额。具体条件是城市名称为 "Dubai" 且支付金额大于 60。我们来分析每个选项:

A:
```sql
select count(用户ID) as 支付用户数, sum(支付金额) as 支付总金额 from pay_fact where 城市 = "Dubai" and 支付金额 > 60;
```
- 这个选项计算了满足条件的记录数和支付总金额,但没有去重用户ID,因此支付用户数可能会重复统计同一用户的多笔支付。

B:
```sql
select count(distinct 用户ID) as 支付用户数, sum(支付金额) as 支付总金额 from pay_fact where 城市 = "Dubai" and 支付金额 > 60;
```
- 这个选项正确地使用了 `count(distinct 用户ID)` 来统计不同的支付用户数,并计算了支付总金额。满足题目要求。

C:
```sql
select count(用户ID) as 支付用户数, sum(支付金额) as 支付总金额 from pay_fact having 城市 = "Dubai" and 支付金额 > 60;
```
- 这个选项错误地使用了 `having` 子句,而没有 `group by`,导致语法错误。`having` 通常用于过滤聚合后的结果集。

D:
```sql
select count(distinct 用户ID) as 支付用户数, sum(支付金额) as 支付总金额 from pay_fact where 支付金额 > 60 group by 城市 having 城市 = "Dubai";
```
- 这个选项在逻辑上是正确的,因为它先过滤支付金额大于60的记录,然后按城市分组,并使用 `having` 过滤城市为 "Dubai" 的结果。同时,使用 `count(distinct 用户ID)` 统计不同用户。

正确答案是 B 和 D。B 直接在 `where` 子句中使用条件过滤,而 D 使用 `group by` 和 `having` 达到同样的效果。两者都正确计算了不同的支付用户数和支付总金额。