sql查询id最大的一行_使用 SQL 查询所有产品的客户ID

SQL 是作为开发工程师、数据工程师必须要深入掌握的一项技能。我也一直在提升这部分的能力,从入门到精通。除了阅读一些 SQL 经典书籍,刷题也是一个不错的选择。于是,我将做过的题目与解法,汇总到这里,和大家一起学习。

SQL 练习题系列和「体验碎片」系列一样,会不定期进行更新。

第一道题:写一条 SQL 查询语句,从 customer 表中查询购买了 product 表中所有产品的客户的 id。

3d34e3d96a2a905af7388c3a485df47d.png

解法:

1.对每个客户购买的产品分组聚合,有的客户可能多次购买一个产品,因此需要对 product_key 去重;2.题目要求是取出购买了所有产品的客户,对产品表的产品计数;3.客户购买的产品数量刚好等于 product 表中所有产品数量。

select  customer_id from Customer group by  customer_id  having count(distinct product_key ) = (select count( *) from Product)

第二道题:写一段 SQL 来查找在 2019-08-16 时全部产品的价格,假设所有产品在修改前的价格都是 10。

c8a5c3c859d9ca51ca50bdb826ac730e.png

思路:

1.先在 product 表中找出全部产品在change_date为 "2019-08-16"当天以及之前最近一次的new_price。

(select       product_id,     new_pricefrom (select       product_id,      new_price,      row_number()over(partition by product_id order by change_date desc) as rkfrom  Productswhere change_date <= "2019-08-16" )rwhere r.rk = 1

2.将产品表作为主表,对其所有产品去重,作为表 a,使用 left join 连接 b 表,得到 new_price,如果 a 表有的产品没有在"2019-08-16"之前没有修改,则 new_price 则为 null 值,设置价格为 10,使用 ifnull 公式,如果 b.new_price 值为空,则赋值为 10。

select      a.product_id,ifnull(b.new_price,10) as pricefrom (select  distinct product_idfrom Products ) aleft join (select     product_id,     new_pricefrom (select       product_id,      new_price,      row_number()over(partition by product_id order by change_date desc) as rkfrom  Productswhere change_date <= "2019-08-16") r where r.rk = 1) b on a.product_id = b.product_id
54680c1c84ca928314f4cac0b4dfc1db.png

1a9ada8366aec26b105978a8f3576108.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值