大數據面試SQL每日一題系列:最高峰同時線上主播人數。位元組,快手等大廠高頻面試題

来源:https://www.cnblogs.com/lubians/p/18175838
-Advertisement-
Play Games

大數據面試SQL每日一題系列:最高峰同時線上主播人數。位元組,快手等大廠高頻面試題 之後會不定期更新每日一題sql系列。 SQL面試題每日一題系列內容均來自於網路以及實際使用情況收集,如有雷同,純屬巧合。 1.題目 問題1:如下為某直播平臺各主播的開播及關播時間數據明細,現在需要計算該平臺最高峰期同時 ...


大數據面試SQL每日一題系列:最高峰同時線上主播人數。位元組,快手等大廠高頻面試題

之後會不定期更新每日一題sql系列。

SQL面試題每日一題系列內容均來自於網路以及實際使用情況收集,如有雷同,純屬巧合。

1.題目

問題1:如下為某直播平臺各主播的開播及關播時間數據明細,現在需要計算該平臺最高峰期同時線上的主播人數。

問題2:以下為某直播間用戶上線與下線的時間數據明細,現求該直播間最高峰同時線上的用戶人數。

以上兩個問法為同一問題。

2.基礎數據準備

create table if not exists temp.user_login_info (
  `id` bigint comment '用戶id',
  `start_time` string comment '上線時間',
  `end_time` string comment '下線時間'
) comment '用戶上下線時間測試'

數據預覽

id start_time end_time
1 2024-05-05 07:59:06 2024-05-05 08:57:54
2 2024-05-05 08:14:02 2024-05-05 08:51:32
3 2024-05-05 08:38:10 2024-05-05 08:38:28
4 2024-05-05 08:41:22 2024-05-05 08:42:03
5 2024-05-05 08:33:39 2024-05-05 08:52:19
6 2024-05-05 08:54:50 2024-05-05 08:56:07
7 2024-05-05 08:56:12 2024-05-05 08:57:42
8 2024-05-05 08:21:43 2024-05-05 08:21:48
9 2024-05-05 07:59:58 2024-05-05 08:13:42
10 2024-05-05 08:20:05 2024-05-05 08:29:42

3.問題分析

查詢同時最大人數,考察的是對拉鏈轉化為日誌的處理方式以及聚合開窗函數的累積計算的使用。聚合開窗函數使用詳見SQL視窗函數之聚合函數類

維度 評分
題目難度 ⭐️⭐️⭐️⭐️
題目清晰度 ⭐️⭐️⭐️⭐️⭐️
業務常見度 ⭐️⭐️⭐️⭐️⭐️

4.解題SQL

1.生成日誌流水

對原始數據進行處理,生成主播上下線的日誌流水數據,增加標記狀態值(上線為1,下線為-1)。

-- 上播記錄
select
id,
start_time as log_time,
1 as flag
from temp.user_login_info
union all 
-- 下播記錄
select
id,
end_time as log_time,
-1 as flag
from temp.user_login_info

數據結果如下:

id log_time flag
1 2024-05-05 08:57:54 -1
2 2024-05-05 08:51:32 -1
3 2024-05-05 08:38:28 -1
4 2024-05-05 08:42:03 -1
5 2024-05-05 08:52:19 -1
6 2024-05-05 08:56:07 -1
7 2024-05-05 08:57:42 -1
8 2024-05-05 08:21:48 -1
9 2024-05-05 08:13:42 -1
10 2024-05-05 08:29:42 -1
1 2024-05-05 07:59:06 1
2 2024-05-05 08:14:02 1
3 2024-05-05 08:38:10 1
4 2024-05-05 08:41:22 1
5 2024-05-05 08:33:39 1
6 2024-05-05 08:54:50 1
7 2024-05-05 08:56:12 1
8 2024-05-05 08:21:43 1
9 2024-05-05 07:59:58 1
10 2024-05-05 08:20:05 1

2.開窗函數聚合

對上下線日誌流水進行開窗聚合累積計算且查看上下線明細。

select id,log_time,flag,sum(flag) over(order by log_time) as acum_login from (
  -- 上播記錄
  select
  id,
  start_time as log_time,
  1 as flag
  from temp.user_login_info where id <= 10
  union all 
  -- 下播記錄
  select
  id,
  end_time as log_time,
  -1 as flag
  from temp.user_login_info where id <= 10
) a
order by log_time

數據結果

id log_time flag acum_login
1 2024-05-05 07:59:06 1 1
9 2024-05-05 07:59:58 1 2
9 2024-05-05 08:13:42 -1 1
2 2024-05-05 08:14:02 1 2
10 2024-05-05 08:20:05 1 3
8 2024-05-05 08:21:43 1 4
8 2024-05-05 08:21:48 -1 3
10 2024-05-05 08:29:42 -1 2
5 2024-05-05 08:33:39 1 3
3 2024-05-05 08:38:10 1 4
3 2024-05-05 08:38:28 -1 3
4 2024-05-05 08:41:22 1 4
4 2024-05-05 08:42:03 -1 3
2 2024-05-05 08:51:32 -1 2
5 2024-05-05 08:52:19 -1 1
6 2024-05-05 08:54:50 1 2
6 2024-05-05 08:56:07 -1 1
7 2024-05-05 08:56:12 1 2
7 2024-05-05 08:57:42 -1 1
1 2024-05-05 08:57:54 -1 0

3.計算最大線上人數

最後計算最大同時線上人數

select max(acum_login) as max_acum_login from (
  select id,log_time,flag,sum(flag) over(order by log_time) as acum_login from (
    select
    id,
    start_time as log_time,
    1 as flag
    from temp.user_login_info where id <= 10
    union all 
    --下播記錄
    select
    id,
    end_time as log_time,
    -1 as flag
    from temp.user_login_info where id <= 10
  ) a
) b 

數據結果

max_acum_login
4

最大線上人數為4。

5.衍生問題解答

如果是最上面的問題2,每個房間同時線上最大人數呢?

那它的寫法應該是這樣的。

select room_id,max(acum_login) as max_acum_login from (
    select id,room_id
  		,log_time,flag
  		,sum(flag) over(partition by room_id order by log_time) as acum_login 
  	from (
        -- 上線記錄
      	select
        id,room_id,
        start_time as log_time,
        1 as flag
        from temp.user_login_info where id <= 10
        union all 
        -- 下線記錄
        select
        id,room_id,
        end_time as log_time,
        -1 as flag
        from temp.user_login_info where id <= 10
    ) a
) b 
group by room_id

就不補充具體數據演示了。

思路:以第一個問題為基礎,這裡只是多增加了一個房間維度,按房間分組進行開窗聚合累積計算以及最後的分組求最大值。如有問題,歡迎聯繫我點擊此處加群一起學習討論。

以上,本期全部內容。

感謝閱讀。

按例,歡迎點擊此處關註我的個人公眾號,交流更多知識。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 概述:本示例演示了在WPF應用程式中實現多語言支持的詳細步驟。通過資源字典和數據綁定,以及使用語言管理器類,應用程式能夠在運行時動態切換語言。這種方法使得多語言支持更加靈活,便於維護,同時提供清晰的代碼結構。 在WPF中實現多語言的一種常見方法是使用資源字典和數據綁定。以下是一個詳細的步驟和示例源代 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • 概述:本文代碼示例演示瞭如何在WPF中使用LiveCharts庫創建動態條形圖。通過創建數據模型、ViewModel和在XAML中使用`CartesianChart`控制項,你可以輕鬆實現圖表的數據綁定和動態更新。我將通過清晰的步驟指南包括詳細的中文註釋,幫助你快速理解並應用這一功能。 先上效果: 在 ...
  • Docker安裝 1、Rocky Linux 下載Rocky Linux 安裝 Docker 引擎 |Docker 文檔 阿裡雲開源鏡像 1.1、設置存儲庫 安裝軟體包(提供實用程式)並設置存儲庫。 yum-utils yum-config-manager sudo yum install -y y ...
  • 一:keystone組件部署 只在控制節點上面操作 1、安裝和配置keystone # 1.安裝keystone軟體包 # wsgi:使web伺服器支持WSGI的插件 # httpd:Apache軟體包 # openstack-keystone:keystone的軟體包 [root@controll ...
  • title: 進程間通信 cover: https://img2.imgtp.com/2024/04/30/9GnvXoDg.png tags: - 通信 - linux categories: linux系統編程 引言 進程間通信(interprocess communication,簡稱 IPC ...
  • 目錄網路配置服務管理防火牆配置文件下載wget和curl網路連接信息netstat和ss Linux 網路管理涉及一系列任務,包括配置網路介面、設置IP地址、管理網路服務和防火牆等。 網路配置 網卡命名 根據網路介面定義設備: ethX 傳統的乙太網介面命名方式,其中 X 通常是數字,如 eth0 ...
一周排行
    -Advertisement-
    Play Games
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
  • 目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...