1581-进店却未进行过交易的顾客

进店却未进行过交易的顾客

原文地址:1581. 进店却未进行过交易的顾客 - 力扣(LeetCode)

  • 题目如下所示

个人题解

这题比较简单,主要得学会分析题目(在对分组不熟悉的情况下,可以使用GROUP_CONCAT函数进行字段拼接查询进行分析,前面的题目有说到过)。以下为个人思考过程

  • -- 1. 建表
    -- 该表包含有关光临到购物中心的顾客的信息
    CREATE TABLE 1581_Visits(
    visit_id INT,
    customer_id INT,
    PRIMARY KEY(visit_id)
    );
    -- 该表包含了 visit_id 期间进行的交易的信息
    CREATE TABLE 1581_Transactions(
    transaction_id INT,
    visit_id INT,
    amount INT,
    PRIMARY KEY(transaction_id)
    );
    -- 2. 有一些顾客可能光顾了购物中心但没有进行交易,编写一个 SQL 查询这些顾客的ID,以及他们只光顾不交易的次数
    SELECT vi.visit_id, vi.customer_id, GROUP_CONCAT(vi.customer_id), GROUP_CONCAT(tr.visit_id) FROM 1581_Visits vi LEFT JOIN 1581_Transactions tr ON vi.visit_id = tr.visit_id GROUP BY vi.visit_id, vi.customer_id;
    SELECT vi.visit_id, vi.customer_id FROM 1581_Visits vi LEFT JOIN 1581_Transactions tr ON vi.visit_id = tr.visit_id GROUP BY vi.visit_id, vi.customer_id HAVING COUNT(tr.visit_id) = 0;
    -- 在此基础上再分一次组,计算customer_id的数量?
    -- 试试先找出没在购物中心交易的记录
    SELECT vi.customer_id, COUNT(vi.customer_id) count_no_trans FROM 1581_Visits vi LEFT JOIN 1581_Transactions tr ON vi.visit_id = tr.visit_id WHERE ISNULL(tr.transaction_id) GROUP BY vi.customer_id;
    -- 换成 where 连接(不过显然,where连接只会保证存在的情况下,如果查询不存在还需要子查询,eg:id不在某个列表中)
    SELECT vi.customer_id, COUNT(vi.customer_id) count_no_trans FROM 1581_Visits vi WHERE vi.visit_id NOT IN(SELECT tr.visit_id FROM 1581_Transactions tr) GROUP BY vi.customer_id;
posted @   OnlyOnYourself-Lzw  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2022-07-11 05-Nacos注册中心
2022-07-11 04-Ribbon负载均衡
2022-07-11 03-Eureka注册中心
2022-07-11 02-服务拆分和远程调用
2022-07-11 01-微服务的概念
点击右上角即可分享
微信分享提示