Leetcode 1336. 每次訪問的交易次數

1.題目基本信息

1.1.題目描述

表: Visits

±--------------±--------+

| Column Name | Type |

±--------------±--------+

| user_id | int |

| visit_date | date |

±--------------±--------+

(user_id, visit_date) 是該表的主鍵(具有唯一值的列的組合)

該表的每行表示 user_id 在 visit_date 訪問了銀行

表: Transactions

±-----------------±--------+

| Column Name | Type |

±-----------------±--------+

| user_id | int |

| transaction_date | date |

| amount | int |

±-----------------±--------+

該表可能有重復行

該表的每一行表示 user_id 在 transaction_date 完成了一筆 amount 數額的交易

可以保證用戶 (user) 在 transaction_date 訪問了銀行 (也就是說 Visits 表包含 (user_id, transaction_date) 行)

銀行想要得到銀行客戶在一次訪問時的交易次數和相應的在一次訪問時該交易次數的客戶數量的圖表

編寫解決方案找出多少客戶訪問了銀行但沒有進行任何交易,多少客戶訪問了銀行進行了一次交易等等

結果包含兩列:

  • transactions_count: 客戶在一次訪問中的交易次數
  • visits_count: 在 transactions_count 交易次數下相應的一次訪問時的客戶數量

transactions_count 的值從 0 到所有用戶一次訪問中的 max(transactions_count)

結果按 transactions_count 排序

1.2.題目地址

https://leetcode.cn/problems/number-of-transactions-per-visit/description/

2.解題方法

2.1.解題思路

遞歸+聚合

2.2.解題步驟

第一步,將Visits的visit_date作為transaction_date,amount看做0,和Transaction表格做UNION ALL,得到表格T1

第二步,T1中,以user_id,transaction_date作為主鍵,對(amount>0)的求和,得到每個用戶每次訪問的交易次數,記為字段transactions_count,得到表格T2

第三步,T2中,統計所有transactions_count出現的次數,記為字段visits_count,得到表格T3

第四步,獲取遞歸的構建transactions_count=0-MAX(transactions_count)的表格T4

第五步,T4和T3作左連接,visits_count為NULL則記為0

3.解題代碼

sql代碼

# Write your MySQL query statement below
WITH RECURSIVE 
T1 AS (# 第一步,將Visits的visit_date作為transaction_date,amount看做0,和Transaction表格做UNION ALL,得到表格T1SELECT * FROM TransactionsUNION ALLSELECT user_id, visit_date AS transaction_date, 0 AS amountFROM Visits
), T2 AS (# 第二步,T1中,以user_id,transaction_date作為主鍵,對(amount>0)的求和,得到每個用戶每次訪問的交易次數,記為字段transactions_count,得到表格T2SELECT SUM(amount > 0) AS transactions_countFROM T1GROUP BY user_id, transaction_date
), T3 AS (# 第三步,T2中,統計所有transactions_count出現的次數,記為字段visits_count,得到表格T3SELECT transactions_count, COUNT(transactions_count) AS visits_countFROM T2GROUP BY transactions_count
), T4 AS (# 第四步,獲取遞歸的構建transactions_count=0-MAX(transactions_count)的表格T4SELECT 0 AS transactions_countUNION ALL SELECT transactions_count + 1 AS transactions_countFROM T4 WHERE transactions_count < (SELECT MAX(transactions_count) FROM T3)
)# 第五步,T4和T3作左連接,visits_count為NULL則記為0
SELECT T4.transactions_count, IFNULL(visits_count, 0) AS visits_count
FROM T3 RIGHT JOIN T4 ON T3.transactions_count = T4.transactions_count
ORDER BY transactions_count

4.執行結果

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/83437.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/83437.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/83437.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

騰訊云國際版和國內版賬戶通用嗎?一樣嗎?為什么?

在當今全球化的數字化時代&#xff0c;云計算服務成為眾多企業和個人拓展業務、存儲數據的重要選擇。騰訊云作為國內領先的云服務提供商&#xff0c;其國際版和國內版備受關注。那么&#xff0c;騰訊云國際版和國內版賬戶是否通用&#xff1f;它們究竟一樣嗎&#xff1f;背后又…

解鎖Java多級緩存:性能飛升的秘密武器

一、引言 文末有彩蛋 在當今高并發、低延遲的應用場景中&#xff0c;傳統的單級緩存策略往往難以滿足性能需求。隨著系統規模擴大&#xff0c;數據訪問的瓶頸逐漸顯現&#xff0c;如何高效管理緩存成為開發者面臨的重大挑戰。多級緩存架構應運而生&#xff0c;通過分層緩存設…

Android Kotlin 算法詳解:鏈表相關

前言 &#x1f60a; 在 Android 開發中&#xff0c;算法與數據結構是基本功之一&#xff0c;而鏈表&#xff08;Linked List&#xff09;作為常見的數據結構&#xff0c;經常出現在各類面試題與實際業務場景中。本文將以 Android Kotlin 為語言&#xff0c;結合 LeetCode 上的…

Blinko智能筆記系統實現跨平臺同步與隱私保護的完整技術方案解析

文章目錄 前言1. Docker Compose一鍵安裝2. 簡單使用演示3. 安裝cpolar內網穿透4. 配置公網地址5. 配置固定公網地址 推薦 ? 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。 點擊跳轉到網站 前言 是否…

【小紅書】API接口,獲取筆記列表

小紅書筆記列表API接口詳解 - 深圳小于科技助力高效數據對接 深圳小于科技&#xff08;官網&#xff1a;https://www.szlessthan.com&#xff09;提供的小紅書筆記列表API接口&#xff0c;幫助開發者快速獲取小紅書平臺筆記數據&#xff0c;實現高效內容管理與分析。 接口概述…

Qwen2.5-VL 損失函數

Qwen2.5-VL 損失函數 flyfish 文章名稱鏈接深入理解交叉熵損失 CrossEntropyLoss - 概率基礎鏈接深入理解交叉熵損失 CrossEntropyLoss - 對數鏈接深入理解交叉熵損失 CrossEntropyLoss - 概率分布鏈接深入理解交叉熵損失 CrossEntropyLoss - 信息論&#xff08;交叉熵&#…

LeetCode 1524. 和為奇數的子數組數目

好的&#xff01;讓我們詳細解釋 LeetCode 1524. 和為奇數的子數組數目 這道題的思路和解法。 題目&#xff1a; https://leetcode.cn/problems/number-of-sub-arrays-with-odd-sum/description/ 題目分析 問題描述&#xff1a; 給定一個整數數組 arr&#xff0c;返回其中和…

kafka學習筆記(三、消費者Consumer使用教程——消費性能多線程提升思考)

1.簡介 KafkaConsumer是非線程安全的&#xff0c;它定義了一個acquire()方法來檢測當前是否只有一個線程在操作&#xff0c;如不是則會拋出ConcurrentModifcationException異常。 acquire()可以看做是一個輕量級鎖&#xff0c;它僅通過線程操作計數標記的方式來檢測線程是否發…

百度蜘蛛池的作用是什么?技術@baidutopseo

百度蜘蛛池的作用 百度蜘蛛池是一種用于集中管理和調度百度搜索引擎蜘蛛&#xff08;爬蟲&#xff09;的技術工具。其主要目的是優化網站內容的收錄效率&#xff0c;幫助搜索引擎更高效地發現和抓取網頁內容。技術baidutopseo 提升收錄效率 通過集中大量百度蜘蛛的訪問請求&…

黑馬Java面試筆記之 消息中間件篇(Kafka)

一. Kafka保證消息不丟失 Kafka如何保證消息不丟失 使用Kafka在消息的收發過程中都會出現消息丟失&#xff0c;Kafka分別給出了解決方案 生產者發送消息到Brocker丟失消息在Brocker中存儲丟失消費者從Brocker接收消息丟失 1.1 生產者發送消息到Brocker丟失 設置異步發送 消息…

dis css port brief 命令詳細解釋

華為交換機命令 display css port brief 詳細解釋 display css port brief 是華為交換機中用于 快速查看堆疊&#xff08;CSS&#xff0c;Cluster Switch System&#xff09;端口狀態及關鍵參數 的命令&#xff0c;適用于日常運維、堆疊鏈路健康檢查及故障定位。以下是該命令的…

Redis 緩存問題及其解決方案

1. 緩存雪崩 概念&#xff1a;緩存雪崩是指在緩存層出現大范圍緩存失效或緩存服務器宕機的情況下&#xff0c;大量請求直接打到數據庫&#xff0c;導致數據庫壓力驟增&#xff0c;甚至可能引發數據庫宕機。 影響&#xff1a;緩存雪崩會導致系統性能急劇下降&#xff0c;甚至導…

使用Python進行函數作畫

前言 因為之前通過deepseek繪制一下卡通的人物根本就不像&#xff0c;又想起來之前又大佬通過函數繪制了一些圖像&#xff0c;想著能不能用Python來實現&#xff0c;結果發現可以&#xff0c;不過一些細節還是需要自己調整&#xff0c;deepseek整體的框架是沒有問題&#xff0…

關于list集合排序的常見方法

目錄 1、list.sort() 2、Collections.sort() 3、Stream.sorted() 4、進階排序技巧 4.1 空值安全處理 4.2 多字段組合排序 4.3. 逆序 5、性能優化建議 5.1 并行流加速 5.2 原地排序 6、最佳實踐 7、注意事項 前言 Java中對于集合的排序操作&#xff0c;分別為list.s…

Java高級 | (二十二)Java常用類庫

參考&#xff1a;Java 常用類庫 | 菜鳥教程 一、核心Java類庫 二、常用第三方庫 以下是 Java 生態系統中廣泛使用的第三方庫&#xff1a; 類別庫名稱主要功能官方網站JSON 處理JacksonJSON 序列化/反序列化https://github.com/FasterXML/jacksonGsonGoogle 的 JSON 庫https:…

幾種常用的Agent的Prompt格式

一、基礎框架范式&#xff08;Google推薦標準&#xff09; 1. 角色與職能定義 <Role_Definition> 你是“項目專家”&#xff08;Project Pro&#xff09;&#xff0c;作為家居園藝零售商的首席AI助手&#xff0c;專注于家裝改造領域。你的核心使命&#xff1a; 1. 協助…

蛋白質結構預測軟件openfold介紹

openfold 是一個用 Python 和 PyTorch 實現的 AlphaFold2 的開源復現版&#xff0c;旨在提升蛋白質結構預測的可復現性、可擴展性以及研究友好性。它允許研究者在不開源 DeepMind 原始代碼的情況下&#xff0c;自由地進行蛋白結構預測的訓練和推理&#xff0c;并支持自定義模型…

AD轉嘉立創EDA

可以通過嘉立創文件遷移助手進行格式的轉換 按照它的提示我們整理好文件 導出后是這樣的&#xff0c;第一個文件夾中有原理圖和PCB&#xff0c;可以把它們壓縮成一個壓縮包 這個時候我們打開立創EDA&#xff0c;選擇導入AD 這樣就完成了

MySQL(50)如何使用UNSIGNED屬性?

在 MySQL 中&#xff0c;UNSIGNED 屬性用于數值數據類型&#xff08;如 TINYINT、SMALLINT、MEDIUMINT、INT 和 BIGINT&#xff09;&#xff0c;表示該列只能存儲非負整數。使用 UNSIGNED 屬性可以有效地擴展列的正整數范圍&#xff0c;因為它不需要為負數保留空間。 1. 定義與…

什么是鏈游,鏈游系統開發價格以及方案

2025 Web3錢包開發指南&#xff1a;從多版本源碼到安全架構實戰 在數字資產爆發式增長的今天&#xff0c;Web3錢包已成為用戶進入鏈上世界的核心入口。作為開發者&#xff0c;如何高效構建安全、跨鏈、可擴展的錢包系統&#xff1f;本文結合前沿技術方案與開源實踐&#xff0c…