首页 > 其他分享 >leetcode刷题-1581. 进店却未进行过交易的顾客

leetcode刷题-1581. 进店却未进行过交易的顾客

时间:2024-10-24 09:10:12浏览次数:1  
标签:进店 int 1581 visit id 交易 顾客 leetcode ID

链接:1581. 进店却未进行过交易的顾客 - 力扣(LeetCode)

前提条件:

表:Visits
+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| visit_id    | int     |
| customer_id | int     |
+-------------+---------+
visit_id 是该表中具有唯一值的列。
该表包含有关光临过购物中心的顾客的信息。

表:Transactions
+----------------+---------+
| Column Name    | Type    |
+----------------+---------+
| transaction_id | int     |
| visit_id       | int     |
| amount         | int     |
+----------------+---------+
transaction_id 是该表中具有唯一值的列。
此表包含 visit_id 期间进行的交易的信息。

有一些顾客可能光顾了购物中心但没有进行交易。请你编写一个解决方案,来查找这些顾客的 ID ,以及他们只光顾不交易的次数。

返回以 任何顺序 排序的结果表。

查看代码

 create database lc default character set utf8mb4;
use lc;

create table Visits
(
    visit_id int,
    customer_id int
);
create table Transactions(
    transaction_id int,
    visit_id int,
    amount int
);
insert into
            Visits
values
           (1, 23),
           (2,9),
           (4,30),
           (5,54),
           (6,96),
           (7,54),
           (8,54);

insert into
            Transactions
values
        (2, 5, 310),
        (3, 5, 300),
        (9, 5, 200),
        (12, 1, 910),
        (13, 2, 970);

思路:

  1. Visits表=交易顾客+只交易不光顾顾客
  2. Transactions=交易顾客
  3. Visits左连接Transactions则只关顾不交易的顾客visit_id会是null
  4. 分组,过滤
  5. 结束

优化:

  1. 使用子查询代替连接查询

解释:

解释:
ID = 23 的顾客曾经逛过一次购物中心,并在 ID = 12 的访问期间进行了一笔交易。
ID = 9 的顾客曾经逛过一次购物中心,并在 ID = 13 的访问期间进行了一笔交易。
ID = 30 的顾客曾经去过购物中心,并且没有进行任何交易。
ID = 54 的顾客三度造访了购物中心。在 2 次访问中,他们没有进行任何交易,在 1 次访问中,他们进行了 3 次交易。
ID = 96 的顾客曾经去过购物中心,并且没有进行任何交易。
如我们所见,ID 为 30 和 96 的顾客一次没有进行任何交易就去了购物中心。顾客 54 也两次访问了购物中心并且没有进行任何交易。

实现:

 3.

select
        *
from
        visits v left join transactions t on v.visit_id = t.visit_id ;

 4.

select
        v.customer_id,count(*)
from
        visits v left join transactions t on v.visit_id = t.visit_id
where
        t.visit_id is null
group by
        v.customer_id;

优化后:

select 
        v.customer_id, COUNT(*) count_no_trans
from
        Visits v
where 
        v.visit_id NOT IN (select visit_id from Transactions)
group by 
        v.customer_id;

标签:进店,int,1581,visit,id,交易,顾客,leetcode,ID
From: https://www.cnblogs.com/kezz/p/18498828

相关文章

  • Leetcode刷题Python之3185.构成整天的下标对数目II
    提示:直接暴力求解会超过执行时间,因此要考虑其他方法降低复杂度。文章目录问题描述一、示例:二、解题思路1.找余数2.利用哈希表存储余数3.逐步统计配对数代码实现解释代码复杂度分析问题描述给定一个整数数组hours,表示时间,以小时为单位。我们需要找到数组中满......
  • LeetCode|3185. 构成整天的下标对数目 II(day21)
    作者:MJ昊博客:掘金、CSDN等公众号:程序猿的编程之路今天是昊的算法之路第21天,今天分享的是LeetCode第3185题构成整天的下标对数目II的解题思路。这是一道中等难度的题目,主要考察如何高效地统计两个元素之和为24的倍数的下标对,通过优化的算法减少时间复杂度。题目描......
  • LeetCode|3184. 构成整天的下标对数目 I(day20)
    作者:MJ昊博客:掘金、CSDN等公众号:程序猿的编程之路今天是昊的算法之路第20天,今天分享的是LeetCode第3184题构成整天的下标对数目I的解题思路。这是一道简单难度的题目,考察的是数组元素之间的组合与模运算。题目描述简要回顾给定一个整数数组hours,求满足(hours[i]+......
  • 每日一题:Leetcode-316 去除重复字母
    力扣题目解题思路java代码力扣题目:给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。示例1:输入:s="bcabc"输出:"abc"示例2:输入:s="cbacdcbc"输出:"acdb"提示:1<=s.l......
  • LeetCode刷题-移除元素
    给你一个数组nums和一个值val,你需要原地移除所有数值等于val的元素。元素的顺序可能发生改变。然后返回nums中与val不同的元素的数量。假设nums中不等于val的元素数量为k,要通过此题,您需要执行以下操作:更改nums数组,使nums的前k个元素包含不等于val的......
  • 代码随想录算法训练营第八天|leetcode344.反转字符串、leetcode541. 反转字符串II、卡
    1leetcode344.反转字符串题目链接:344.反转字符串-力扣(LeetCode)文章链接:代码随想录视频链接:字符串基础操作!|LeetCode:344.反转字符串_哔哩哔哩_bilibili自己的思路:直接使用python的内置函数reverse进行一个操作1.1自己的代码1.1.1python的内置函数classSolution:......
  • 【快慢指针】LeetCode 143. 重排链表
    题解用快慢指针先找到中间结点,然后断开前后两条链,用头插法的思路逆转后面那条链,最后两条链依次从前往后遍历插入即可。参考代码/***Definitionforsingly-linkedlist.*structListNode{*intval;*ListNode*next;*ListNode():val(0),next(nul......
  • 【从零开始的LeetCode-算法】884. 两句话中的不常见单词
    句子 是一串由空格分隔的单词。每个 单词 仅由小写字母组成。如果某个单词在其中一个句子中恰好出现一次,在另一个句子中却 没有出现 ,那么这个单词就是 不常见的 。给你两个 句子 s1 和 s2 ,返回所有 不常用单词 的列表。返回列表中单词可以按 任意顺序 组织。......
  • 【从零开始的LeetCode-算法】3184. 构成整天的下标对数目 I
    给你一个整数数组 hours,表示以 小时 为单位的时间,返回一个整数,表示满足 i<j 且 hours[i]+hours[j] 构成 整天 的下标对 i, j 的数目。整天 定义为时间持续时间是24小时的 整数倍 。例如,1天是24小时,2天是48小时,3天是72小时,以此类推。示例1:......
  • 代码随想录算法训练营第七天|leetcode454.四数相加II、leetcode383. 赎金信 、leetcod
    1leetcode454.四数相加II题目链接:454.四数相加II-力扣(LeetCode)文章链接:代码随想录视频链接:学透哈希表,map使用有技巧!LeetCode:454.四数相加II_哔哩哔哩_bilibili自己的思路:第一反应就是暴力搜索,一层一层for循环来完成,就是会超时1.1自己的代码纯纯暴力搜索classSolutio......