当前位置: 首页 > news >正文

力扣之1398.购买了产品A和产品B却没有购买产品C顾客

  • 题目:

  • Sql 建表语句:

  • Create table If Not Exists Customers (customer_id int, customer_name varchar(30))
    Create table If Not Exists Orders (order_id int, customer_id int, product_name varchar(30))
    Truncate table Customers
    insert into Customers (customer_id, customer_name) values ('1', 'Daniel')
    insert into Customers (customer_id, customer_name) values ('2', 'Diana')
    insert into Customers (customer_id, customer_name) values ('3', 'Elizabeth')
    insert into Customers (customer_id, customer_name) values ('4', 'Jhon')
    Truncate table Orders
    insert into Orders (order_id, customer_id, product_name) values ('10', '1', 'A')
    insert into Orders (order_id, customer_id, product_name) values ('20', '1', 'B')
    insert into Orders (order_id, customer_id, product_name) values ('30', '1', 'D')
    insert into Orders (order_id, customer_id, product_name) values ('40', '1', 'C')
    insert into Orders (order_id, customer_id, product_name) values ('50', '2', 'A')
    insert into Orders (order_id, customer_id, product_name) values ('60', '3', 'A')
    insert into Orders (order_id, customer_id, product_name) values ('70', '3', 'B')
    insert into Orders (order_id, customer_id, product_name) values ('80', '3', 'D')
    insert into Orders (order_id, customer_id, product_name) values ('90', '4', 'C')
  • 分析:看到题之后,我们可以先把商品表按照顾客id分组,分完组后拼接每个组内的商品,然后使用like判断是否满足条件。图文分析:

  • sql实现:

  • with t1 as (--  把订单表按照顾客id分组,然后拼接商品名select customer_id,group_concat(product_name) a from Orders group by customer_id 
    ),t2 as (-- 然后筛选出里面包含A包含B但是不包含C的信息select * from t1 where a like '%A%' AND a like '%B%' AND a not like '%C%')
    select c1.customer_id,c1.customer_name from t2 ,Customers c1 where t2.customer_id=c1.customer_id
    -- 连接顾客表,得到顾客姓名
  • Pandas 例子:

  • data = [[1, 'Daniel'], [2, 'Diana'], [3, 'Elizabeth'], [4, 'Jhon']]
    customers = pd.DataFrame(data, columns=['customer_id', 'customer_name']).astype({'customer_id':'Int64', 'customer_name':'object'})
    data = [[10, 1, 'A'], [20, 1, 'B'], [30, 1, 'D'], [40, 1, 'C'], [50, 2, 'A'], [60, 3, 'A'], [70, 3, 'B'], [80, 3, 'D'], [90, 4, 'C']]
    orders = pd.DataFrame(data, columns=['order_id', 'customer_id', 'product_name']).astype({'order_id':'Int64', 'customer_id':'Int64', 'product_name':'object'})
  • pandas实现:

  • import pandas as pddef find_customers(customers: pd.DataFrame, orders: pd.DataFrame) -> pd.DataFrame:-- --  把订单表按照顾客id分组,然后拼接商品名a=orders.groupby('customer_id')['product_name'].sum().reset_index()-- 然后筛选出里面包含A包含B但是不包含C的信息a=a[a['product_name'].str.contains('A',case=True) & a['product_name'].str.contains('B',case=True) & ~a['product_name'].str.contains('C',case=True)]-- 连接顾客表,得到顾客姓名b=a.merge(customers, on='customer_id', how='inner')b=b[['customer_id','customer_name']]return b


http://www.mrgr.cn/news/51607.html

相关文章:

  • 飞牛NAS未识别到网卡
  • 【优选算法】——双指针(下篇)!
  • 有关 C#多表查询学习
  • 一步步优化Redis实现分布式锁
  • 【IRV2】Deepfake video detection using InceptionResnetV2
  • Java基础概览和常用知识(七)
  • F5-TTS开源项目详解:非自回归语音合成技术革新与应用场景
  • 【ROS实操六】launch的使用
  • ThreadLocal的应用场景
  • Linux高阶——1013—正则表达式练习
  • 在JasperReports中自动生成序列号
  • 小马哥飞控硬件学习
  • 10.16Python基础-函数
  • 1、HTML笔记
  • AI周报(10.6-10.12)
  • java-day11
  • 通过华为鲲鹏认证的软件产品如何助力信创产业
  • 【建议收藏】ElasticSearch会问什么?看这里!
  • 智慧引擎:探索十款顶尖AI知识库软件的奥秘
  • TCP Analysis Flags 之 TCP Window Update