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”;
时间: 2024-04-28 14:20:02 浏览: 93
MySQL数据库:表的字段类型.pptx
正确答案是 B. select count(distinct 用户ID) as 支付用户数,sum(支付金额) as 支付总金额 from pay_fact where 城市="Dubai" and 支付金额>60;
解析:
A选项中,使用了where进行条件筛选,筛选条件正确,但是没有使用distinct去重,会导致一个用户多笔订单的情况下计算重复,计算结果会偏大。
B选项中,使用了where进行条件筛选,筛选条件正确,并且使用了distinct去重,能够正确计算Dubai城市中支付金额大于60的支付用户数和支付总金额。
C选项中,使用了having进行条件筛选,having和where的区别在于having是对分组后的结果进行筛选,而不是对每一行进行筛选。因此,该选项会先对整张表进行group by分组,再对分组后的结果进行筛选,不符合题目要求。
D选项中,使用了group by进行分组,但是没有使用distinct去重,会导致一个用户多笔订单的情况下计算重复,计算结果会偏大。另外,由于没有对城市进行筛选,会计算所有城市中支付金额大于60的支付用户数和支付总金额,不符合题目要求。
阅读全文