牛客网SQL必知必会
记录一下做题过程
从 Customers 表中检索所有的 ID
描述
现有表Customers如下:
cust_id
A
B
C
【问题】
编写 SQL 语句,从 Customers 表中检索所有的cust_id
【示例答案】
返回cust_id列的内容
cust_id
A
B
C
思路:
1、从表Customers中查看全部cust_id即可
select cust_id
from Customers;
检索并列出已订购产品的清单
描述
表OrderItems含有非空的列prod_id代表商品id,包含了所有已订购的商品(有些已被订购多次)。
prod_id
a1
a2
a3
a4
a5
a6
a7
【问题】编写SQL 语句,检索并列出所有已订购商品(prod_id)的去重后的清单。
思路:
1、OrderItems中查看prod_id列
2、prod_id需要去重 (distinct)
select distinct prod_id
from OrderItems;
检索所有列
现在有Customers 表(表中含有列cust_id代表客户id,cust_name代表客户姓名)
cust_id | cust_name |
---|---|
a1 | andy |
【问题】需要编写 SQL语句,检索所有列。
【示例结果】
返回所有列cust_id和cust_name。
思路:
1、检索所有列直接用*,或者select所有列
select *
from Customers;
select cust_id,cust_name
from Customers;
检索顾客名称并且排序
描述
有表Customers,cust_id代表客户id,cust_name代表客户姓名。
cust_id | cust_name |
---|---|
a1 | andy |
【问题】从 Customers 中检索所有的顾客名称(cust_name),并按从 Z 到 A 的顺序显示结果。
【示例结果】返回客户姓名cust_name
cust_name
tony
tom
lee
hex
ben
andy
an
思路:
1、检索cust_name列。
2、从Z到A排序,即降序排列。order by排序,desc降序。
select cust_name
from Customers
order by cust_name desc;
对顾客ID和日期排序
描述
有Orders表
cust_id | order_num | order_date |
---|---|---|
andy | aaaa | 2021-01-01 00:00:00 |
andy | bbbb | 2021-01-01 12:00:00 |
bob | cccc | 2021-01-10 12:00:00 |
dick | dddd | 2021-01-11 00:00:00 |
【问题】编写 SQL 语句,从 Orders 表中检索顾客 ID(cust_id)和订单号(order_num),并先按顾客 ID 对结果进行排序,再按订单日期倒序排列。
【示例答案】
返回2列,cust_id和order_num
cust_id | order_num |
---|---|
andy | bbbb |
andy | aaaa |
bob | cccc |
dick | dddd |
思路:
1、排序order by
2、ID排序,订单日期倒序排列 desc(注意,只对日期倒序)
select cust_id , order_num
from Orders
order by cust_id , order_date desc;
按照数量和价格排序
描述
假设有一个OrderItems表
quantity | item_price |
---|---|
1 | 100 |
10 | 1003 |
2 | 500 |
【问题】
编写 SQL 语句,显示 OrderItems 表中的数量(quantity)和价格(item_price),并按数量由多到少、价格由高到低排序。
【示例答案】
返回quantity和item_price
思路:
1、数量由多到、价格由高到低,即quantity、item_price都是降序。
select quantity , item_price
from OrderItems
order by quantity desc,item_price desc;
检查SQL语句
描述
有Vendors表
vend_name |
---|
海底捞 |
小龙坎 |
大龙燚 |
【问题】下面的 SQL 语句有问题吗?尝试将它改正确,使之能够正确运行,并且返回结果根据vend_name逆序排列
SELECT vend_name,
FROM Vendors
ORDER vend_name DESC;
【示例展示】
返回vend_name
vend_name |
---|
海底捞 |
小龙坎 |
大龙燚 |
思路:
1、首先这是一道纠错题目,那么可能存在语法上的问题和结论错误的问题。这里给出的代码有明显的语法问题。
2、SELECT vend_name, 后的逗号,是用来分开列与列的,此处只有单列,错误。
3、排序是order by,不是order,错误。
修改后的代码:
SELECT vend_name
FROM Vendors
ORDER by vend_name DESC;
返回固定价格的产品
描述
有表Products
prod_id | prod_name | prod_price |
---|---|---|
a0018 | sockets | 9.49 |
a0019 | iphone13 | 600 |
b0018 | gucci t-shirts | 1000 |
【问题】从 Products 表中检索产品 ID(prod_id)和产品名称(prod_name),只返回价格为 9.49 美元的产品。
【示例结果】返回prod_id和prod_name
prod_id | prod_name |
---|---|
a0018 | sockets |
思路:
1、只返回价格为 9.49 美元的产品,加一个约束条件,where prod_price = ‘9.49’。
select prod_id,prod_name
from Products
where prod_price = 9.49;
返回更高价格的产品
描述
Products 表
prod_id | prod_name | prod_price |
---|---|---|
a0018 | sockets | 9.49 |
a0019 | iphone13 | 600 |
b0019 | gucci t-shirts | 1000 |
【问题】编写 SQL 语句,从 Products 表中检索产品 ID(prod_id)和产品名称(prod_name),只返回价格为 9 美元或更高的产品。
【示例答案】返回prod_id商品id和prod_name商品名称
prod_id | prod_name |
---|---|
a0018 | sockets |
a0019 | iphone13 |
b0019 | gucci t-shirts |
思路:
1、只返回价格为 9 美元或更高的产品,即只返回大于等于9美元的产品,约束条件:where prod_price >= ‘9’
select prod_id,prod_name
from Products
where prod_price >= 9;
返回产品并且按照价格排序
描述
有Products 表
prod_id | prod_name | prod_price |
---|---|---|
a0011 | egg | 3 |
a0019 | sockets | 4 |
b0019 | coffee | 15 |
【问题】编写 SQL 语句,返回 Products 表中所有价格在 3 美元到 6 美元之间的产品的名称(prod_name)和价格(prod_price),然后按价格对结果进行排序
【示例结果】返回商品名称prod_name和商品价格prod_price
prod_name | prod_price |
---|---|
egg | 3 |
sockets | 4 |
注:不需要考虑商品价格相同的情况
思路:
1、价格在 3 美元到 6 美元之间,即where prod_price >=3 and prod_price <= 6,或者使用between 3 and 6。
2、对价格结果进行排序,没说是升序还是降序,默认是升序,即order by prod_price。
select prod_name,prod_price
from Products
where prod_price >=3 and prod_price <= 6
order by prod_price;
or
select prod_name,prod_price
from Products
where prod_price between 3 and 6
order by prod_price;
返回更多的产品
描述
OrderItems表含有:订单号order_num,quantity产品数量
order_num | quantity |
---|---|
a1 | 105 |
a2 | 1100 |
a2 | 200 |
a4 | 1121 |
a5 | 10 |
a2 | 19 |
a7 | 5 |
【问题】从 OrderItems 表中检索出所有不同且不重复的订单号(order_num),其中每个订单都要包含 100 个或更多的产品。
【示例结果】返回订单号列order_num
order_num |
---|
a1 |
a2 |
a4 |
思路:
1、检索出所有不同且不重复的订单号(order_num),即distinct order_num。
2、每个订单都要包含 100 个或更多的产品 quantity >= 100。
select distinct order_num
from OrderItems
where quantity >= 100;
检索供应商名称
描述
Vendors表有字段供应商名称(vend_name)、供应商国家(vend_country)、供应商州(vend_state)
vend_name | vend_country | vend_state |
---|---|---|
apple | USA | CA |
vivo | CNA | shenzhen |
huawei | CNA | xian |
【问题】编写 SQL 语句,从 Vendors 表中检索供应商名称(vend_name),仅返回加利福尼亚州的供应商(这需要按国家[USA]和州[CA]进行过滤,没准其他国家也存在一个CA)
【示例答案】返回供应商名称vend_name
vend_name |
---|
apple |
思路:
1、返回加利福尼亚州的供应商,即vend_country = ‘USA’ and vend_state = ‘CA’。
select vend_name
from Vendors
where vend_country = 'USA' and vend_state = 'CA';
检索并列出已订购产品的清单
描述
OrderItems 表包含了所有已订购的产品(有些已被订购多次)。
prod_id | order_num | quantity |
---|---|---|
BR01 | a1 | 105 |
BR02 | a2 | 1100 |
BR02 | a2 | 200 |
BR03 | a4 | 1121 |
BR017 | a5 | 10 |
BR02 | a2 | 19 |
BR017 | a7 | 5 |
【问题】编写SQL 语句,查找所有订购了数量至少100 个的 BR01、BR02 或BR03 的订单。你需要返回 OrderItems 表的订单号(order_num)、产品 ID(prod_id)和数量(quantity),并按产品 ID 和数量进行过滤。
【示例答案】返回商品id prod_id、订单order_num、数量quantity。
order_num | prod_id | quantity |
---|---|---|
a1 | BR01 | 105 |
a2 | BR02 | 1100 |
a2 | BR02 | 200 |
a4 | BR03 | 1121 |
思路:
1、查找所有订购了数量至少100 个的 BR01、BR02 或BR03 的订单,数量大于等于100,并且prod_id是 BR01、BR02、BR03中的一个,即quantity >= 100 and prod_id in(‘BR01’,‘BR02’,‘BR03’)。
select order_num,prod_id,quantity
from OrderItems
where quantity >= 100 and prod_id in('BR01','BR02','BR03');
返回所有价格在 3美元到 6美元之间的产品的名称和价格
描述
有表Products
prod_id | prod_name | prod_price |
---|---|---|
a0011 | egg | 3 |
a0019 | sockets | 4 |
b0019 | coffee | 15 |
【问题】编写 SQL 语句,返回所有价格在 3美元到 6美元之间的产品的名称(prod_name)和价格(prod_price),使用 AND操作符,然后按价格对结果进行升序排序
【示例结果】
返回商品名称prod_name和商品价格prod_price
prod_name | prod_price |
---|---|
egg | 3 |
sockets | 4 |
注:不需要考虑价格相同时的排序问题
思路:
1、价格在 3美元到 6美元之间,即prod_price >=3 and prod_price<=6,注:此处限制使用and操作符,故不用between…and…。
2、按价格对结果进行升序排序,即order by prod_price 。
select prod_name,prod_price
from Products
where prod_price >=3 and prod_price<=6
order by prod_price;
纠错2
描述
供应商表Vendors有字段供应商名称vend_name、供应商国家vend_country、供应商省份vend_state
vend_name | vend_country | vend_state |
---|---|---|
apple | USA | CA |
vivo | CNA | shenzhen |
huawei | CNA | xian |
【问题】修改正确下面sql,使之正确返回
SELECT vend_name
FROM Vendors
ORDER BY vend_name
WHERE vend_country = 'USA' AND vend_state = 'CA';
【示例结果】
结果返回vend_name
vend_name |
---|
apple |
思路:
1、SQL是有执行顺序的,这里显然是顺序不对,where应该在order by之前。
SELECT vend_name
FROM Vendors
WHERE vend_country = 'USA' AND vend_state = 'CA'
ORDER BY vend_name ;
检索产品名称和描述(一)
描述
Products表
prod_name | prod_desc |
---|---|
a0011 | usb |
a0019 | iphone13 |
b0019 | gucci t-shirts |
c0019 | gucci toy |
d0019 | lego toy |
【问题】编写 SQL 语句,从 Products 表中检索产品名称(prod_name)和描述(prod_desc),仅返回描述中包含 toy 一词的产品名称
【示例结果】返回产品名称和产品描述
prod_name | prod_desc |
---|---|
c0019 | gucci toy |
d0019 | lego toy |
思路:
1、仅返回描述中包含 toy 一词的产品名称,可用like进行模糊查询,即prod_desc like ‘%toy%’。
2、也可用正则表达式 prod_desc regexp ‘toy’。
select prod_name,prod_desc
from Products
where prod_desc like '%toy%';
or
select prod_name,prod_desc
from Products
where prod_desc regexp 'toy';
检索产品名称和描述(二)
描述
Products表
prod_name | prod_desc |
---|---|
a0011 | usb |
a0019 | iphone13 |
b0019 | gucci t-shirts |
c0019 | gucci toy |
d0019 | lego toy |
【问题】编写 SQL 语句,从 Products 表中检索产品名称(prod_name)和描述(prod_desc),仅返回描述中未出现 toy 一词的产品,最后按”产品名称“对结果进行排序。
【示例结果】返回产品名称和产品描述
prod_name | prod_desc |
---|---|
a0011 | usb |
a0019 | iphone13 |
b0019 | gucci t-shirts |
思路:
1、未出现 toy 一词的产品,即prod_desc not like ‘%toy%’,或者not(prod_desc regexp ‘toy’)。
2、按”产品名称“对结果进行排序,排序order by prod_name 。
select prod_name,prod_desc
from Products
where prod_desc not like '%toy%'
order by prod_name;
正则表达式
select prod_name,prod_desc
from Products
where not(prod_desc regexp 'toy')
order by prod_name;
检索产品名称和描述(三)
描述
Products表
【问题】编写 SQL 语句,从 Products 表中检索产品名称(prod_name)和描述(prod_desc),仅返回描述中同时出现 toy 和 carrots 的产品。有好几种方法可以执行此操作,但对于这个挑战题,请使用 AND 和两个 LIKE 比较。
prod_name | prod_desc |
---|---|
a0011 | usb |
a0019 | iphone13 |
b0019 | gucci t-shirts |
c0019 | gucci toy |
d0019 | lego carrots toy |
【示例结果】返回产品名称和产品描述
prod_name | prod_desc |
---|---|
d0019 | lego carrots toy |
思路:
1、描述中同时出现 toy 和 carrots 的产品,即prod_desc like ‘%toy%’ and prod_desc like ‘%carrots%’。
select prod_name,prod_desc
from Products
where prod_desc like '%toy%' and prod_desc like '%carrots%';
正则表达式
select prod_name,prod_desc
from Products
where prod_desc regexp "(.*toy.*carrots.*)|(.*carrots.*toy.*)";
#此题限定使用like和and,此处正则表达式解法用作学习。
检索产品名称和描述(四)
描述
Products表
prod_name | prod_desc |
---|---|
a0011 | usb |
a0019 | iphone13 |
b0019 | gucci t-shirts |
c0019 | gucci toy |
d0019 | lego toy carrots |
【问题】编写 SQL 语句,从 Products 表中检索产品名称(prod_name)和描述(prod_desc),仅返回在描述中以先后顺序同时出现 toy 和 carrots 的产品。
提示:只需要用带有三个 % 符号的 LIKE 即可。
【示例结果】返回产品名称和产品描述
prod_name | prod_desc |
---|---|
d0019 | lego toy carrots |
思路:
1、描述中以先后顺序同时出现 toy 和 carrots,即prod_desc like “%toy%carrots%”。
select prod_name,prod_desc
from Products
where prod_desc like "%toy%carrots%";
正则表达式
select prod_name,prod_desc
from Products
where prod_desc regexp "(.*toy.*carrots.*)";
别名
描述
别名的常见用法是在检索出的结果中重命名表的列字段(为了符合特定的报表要求或客户需求)。有表Vendors代表供应商信息,vend_id供应商id、vend_name供应商名称、vend_address供应商地址、vend_city供应商城市。
vend_id | vend_name | vend_address | vend_city |
---|---|---|---|
a001 | tencent cloud | address1 | shenzhen |
a002 | huawei cloud | address2 | dongguan |
a003 | aliyun cloud | address3 | hangzhou |
a003 | netease cloud | address4 | guangzhou |
【问题】编写 SQL 语句,从 Vendors 表中检索vend_id、vend_name、vend_address 和 vend_city,将 vend_name重命名为 vname,将 vend_city 重命名为 vcity,将 vend_address重命名为 vaddress,按供应商名称对结果进行升序排序。
【示例结果】返回vend_id 供应商id、vname 供应商名称、vaddress供应商地址、vcity供应商城市。
vend_id | vname | vaddress | vcity |
---|---|---|---|
a003 | aliyun cloud | address3 | hangzhou |
a002 | huawei cloud | address2 | dongguan |
a003 | netease cloud | address4 | guangzhou |
a001 | tencent cloud | address1 | shenzhen |
思路:
1、别名,使用as
2、按供应商名称对结果进行升序排序,即order by vname。
select vend_id,vend_name as vname,vend_address as vaddress,vend_city as vcity
from Vendors
order by vname;
打折
描述
我们的示例商店正在进行打折促销,所有产品均降价 10%。Products表包含prod_id产品id、prod_price产品价格
【问题】编写 SQL语句,从 Products 表中返回 prod_id、prod_price 和 sale_price。sale_price 是一个包含促销价格的计算字段。
提示:可以乘以 0.9,得到原价的 90%(即 10%的折扣)
【示例结果】
返回产品id prod_id、产品价格prod_price、销售价格 sale_price
prod_id | prod_price | sale_price |
---|---|---|
a0011 | 9.49 | 8.541 |
a0019 | 600 | 540 |
b0019 | 1000 | 900 |
思路:
1、所有产品均降价 10%,即sale_price = prod_price * 0.9
select prod_id,prod_price,prod_price*0.9 as sale_price
from Products;
顾客登录名
描述
我们的商店已经上线了,正在创建顾客账户。所有用户都需要登录名,默认登录名是其名称和所在城市的组合。
给出 Customers表 如下:
cust_id | cust_name | cust_contact | cust_city |
---|---|---|---|
a1 | Andy Li | Andy Li | Oak Park |
a2 | Ben Liu | Ben Liu | Oak Park |
a3 | Tony Dai | Tony Dai | Oak Park |
【问题】编写 SQL 语句,返回顾客 ID(cust_id)、顾客名称(cust_name)和登录名(user_login),其中登录名全部为大写字母,并由顾客联系人的前两个字符(cust_contact)和其所在城市的前三个字符(cust_city)组成。提示:需要使用函数、拼接和别名。
【示例结果】
返回顾客id cust_id,顾客名称cust_name,顾客登录名 user_login
cust_id | cust_name | user_login |
---|---|---|
a1 | Andy Li | ANOAK |
a2 | Ben Liu | BEOAK |
a3 | Tony Dai | TOOAK |
思路:
1、登录名全部为大写字母,需要用到函数UPPER()。
2、登录名由顾客联系人的前两个字符(cust_contact)和其所在城市的前三个字符(cust_city)组成,需要用到函数SUBSTRING()、CONCAT()。
select cust_id,cust_name,
UPPER(concat(SUBSTRING(cust_name,1,2),SUBSTRING(cust_city,1,3))) as user_login
from Customers;
#SUBSTRING(截取字段名,截取开始位置,截取个数)
返回 2020 年 1 月的所有订单的订单号和订单日期
描述
Orders订单表
order_num | order_date |
---|---|
a0001 | 2020-01-01 00:00:00 |
a0002 | 2020-01-02 00:00:00 |
a0003 | 2020-01-01 12:00:00 |
a0004 | 2020-02-01 00:00:00 |
a0005 | 2020-03-01 00:00:00 |
【问题】编写 SQL 语句,返回 2020 年 1 月的所有订单的订单号(order_num)和订单日期(order_date),并按订单日期升序排序
【示例结果】
返回订单号order_num,和order_date订单时间
order_num | order_date |
---|---|
a0001 | 2020-01-01 00:00:00 |
a0003 | 2020-01-01 12:00:00 |
a0002 | 2020-01-02 00:00:00 |
【示例解析】
a0001、a0002、a0003 时间属于2020年1月
思路:
1、 2020 年 1 月的所有订单,即满足时间条件即可。
2、按订单日期升序排序,order by order_date
方法一:
select order_num, order_date
from Orders
where order_date like "2020-01%"
order by order_date;
方法二:
select order_num, order_date
from Orders
where year(order_date)=2020 and month(order_date)=01
order by order_date;
确定已售出产品的总数
描述
OrderItems表代表售出的产品,quantity代表售出商品数量。
quantity |
---|
10 |
100 |
1000 |
10001 |
2 |
15 |
【问题】编写 SQL 语句,确定已售出产品的总数。
【示例结果】返回items_ordered列名,表示已售出商品的总数。
items_ordered |
---|
11128 |
思路:
1、已售出产品的总数,累加售出数量即可。
select sum(quantity) as items_ordered
from OrderItems;
确定已售出产品项 BR01 的总数
描述
OrderItems表代表售出的产品,quantity代表售出商品数量,产品项为prod_item。
quantity | prod_id |
---|---|
10 | AR01 |
100 | AR10 |
1000 | BR01 |
10001 | BR010 |
【问题】修改创建的语句,确定已售出产品项(prod_item)为"BR01"的总数。
【示例结果】返回商品项已订购订单数
items_ordered
1000
思路:
1、在上一题的基础上加一个限制条件,产品项(prod_item)为"BR01"。
select sum(quantity) as items_ordered
from OrderItems
where prod_id = 'BR01';
确定 Products 表中价格不超过 10 美元的最贵产品的价格
描述
Products 表
prod_price |
---|
9.49 |
600 |
1000 |
【问题】编写 SQL 语句,确定 Products 表中价格不超过 10 美元的最贵产品的价格(prod_price)。将计算所得的字段命名为 max_price。
【示例结果】返回max_price
max_price |
---|
9.49 |
思路:
1、返回十元以下最高价格max_price。
select max(prod_price) as max_price
from Products
where prod_price <= 10;
返回每个订单号各有多少行数
描述
OrderItems 表包含每个订单的每个产品
order_num |
---|
a002 |
a002 |
a002 |
a004 |
a007 |
【问题】编写 SQL 语句,返回每个订单号(order_num)各有多少行数(order_lines),并按 order_lines对结果进行升序排序。
【示例结果】返回订单号order_num和对应订单号的行数order_lines
order_num | order_lines |
---|---|
a004 | 1 |
a007 | 1 |
a002 | 3 |
【示例解析】
订单号a002有3行订单记录也是最多的订单号故排在最后一位返回,相同订单行数的订单无需过多处理。
思路:
1、返回每个订单号(order_num)各有多少行数(order_lines),使用group by 对order_num计数。
2、按 order_lines对结果进行升序排序,order by order_lines。
select order_num,count(order_num) as order_lines
from OrderItems
group by order_num
order by order_lines;
每个供应商成本最低的产品
描述
有Products表,含有字段prod_price代表产品价格,vend_id代表供应商id
vend_id | prod_price |
---|---|
a0011 | 100 |
a0019 | 0.1 |
b0019 | 1000 |
b0019 | 6980 |
b0019 | 20 |
【问题】编写 SQL 语句,返回名为 cheapest_item 的字段,该字段包含每个供应商成本最低的产品(使用 Products 表中的 prod_price),然后从最低成本到最高成本对结果进行升序排序。
【示例结果】返回供应商id vend_id和对应供应商成本最低的产品cheapest_item。
vend_id | cheapest_item |
---|---|
a0019 | 0.1 |
b0019 | 20 |
a0011 | 100 |
思路:
1、返回名为 cheapest_item 的字段,该字段包含每个供应商成本最低的产品,对供应商进行分组,找最低成本。
2、从最低成本到最高成本对结果进行升序排序,order by cheapest_item。
select vend_id,min(prod_price) as cheapest_item
from Products
group by vend_id
order by cheapest_item;
返回订单数量总和不小于100的所有订单的订单号
描述
OrderItems代表订单商品表,包括:订单号order_num和订单数量quantity。
order_num | quantity |
---|---|
a1 | 105 |
a2 | 1100 |
a2 | 200 |
a4 | 1121 |
a5 | 10 |
a2 | 19 |
a7 | 5 |
【问题】请编写 SQL 语句,返回订单数量总和不小于100的所有订单号,最后结果按照订单号升序排序。
【示例结果】返回order_num订单号。
order_num |
---|
a1 |
a2 |
a4 |
【示例解析】
订单号a1、a2、a4的quantity总和都大于等于100,按顺序为a1、a2、a4。
思路:
1、首先要对order_num分组。
2、订单数量总和不小于100,分组后用having
3、按照订单号升序排序,order by order_num
select order_num
from OrderItems
group by order_num
having sum(quantity)>=100
order by order_num;
计算总和
描述
OrderItems表代表订单信息,包括字段:订单号order_num和item_price商品售出价格、quantity商品数量。
order_num | item_price | quantity |
---|---|---|
a1 | 10 | 105 |
a2 | 1 | 1100 |
a2 | 1 | 200 |
a4 | 2 | 1121 |
a5 | 5 | 10 |
a2 | 1 | 19 |
a7 | 7 | 5 |
【问题】编写 SQL 语句,根据订单号聚合,返回订单总价不小于1000 的所有订单号,最后的结果按订单号进行升序排序。
提示:总价 = item_price 乘以 quantity
【示例结果】
order_num | total_price |
---|---|
a1 | 1050 |
a2 | 1319 |
a4 | 2242 |
思路:
1、根据订单号聚合,group by order_num。
2、返回订单总价不小于1000,having sum(item_price*quantity)>=1000。
3、最后的结果按订单号进行升序排序,order by order_num
select order_num, sum(item_price*quantity) as total_price
from OrderItems
group by order_num
having total_price>=1000
order by order_num;
纠错3
描述
OrderItems表含有order_num订单号
order_num |
---|
a002 |
a002 |
a002 |
a004 |
a007 |
【问题】将下面代码修改正确后执行 |
SELECT order_num, COUNT(*) AS items
FROM OrderItems
GROUP BY items
HAVING COUNT(*) >= 3
ORDER BY items, order_num;
【示例结果】
返回订单号order_num和出现的次数items
order_num | items |
---|---|
a002 | 3 |
【示例解析】
由于订单号a002出现了三次,所以返回3
思路:
1、分组错误
SELECT order_num, COUNT(*) AS items
FROM OrderItems
GROUP BY order_num
HAVING COUNT(*) >= 3
ORDER BY items, order_num;
返回购买价格为 10 美元或以上产品的顾客列表
描述
OrderItems表示订单商品表,含有字段订单号:order_num、订单价格:item_price;Orders表代表订单信息表,含有顾客id:cust_id和订单号:order_num
OrderItems表
order_num | item_price |
---|---|
a1 | 10 |
a2 | 1 |
a2 | 1 |
a4 | 2 |
a5 | 5 |
a2 | 1 |
a7 | 7 |
Orders表
order_num | cust_id |
---|---|
a1 | cust10 |
a2 | cust1 |
a2 | cust1 |
a4 | cust2 |
a5 | cust5 |
a2 | cust1 |
a7 | cust7 |
【问题】使用子查询,返回购买价格为 10 美元或以上产品的顾客列表,结果无需排序。
注意:你需要使用 OrderItems 表查找匹配的订单号(order_num),然后使用Order 表检索这些匹配订单的顾客 ID(cust_id)。
【示例结果】返回顾客id cust_id
cust_id
cust10
【示例解析】
cust10顾客下单的订单为a1,a1的售出价格大于等于10
思路:
1、使用子查询,返回购买价格为 10 美元或以上产品的顾客列表
select
cust_id
from Orders
where order_num in(
select order_num from OrderItems group by order_num having sum(item_price) >= 10
)