Niuke SQL ビッグ ファクトリー インタビュー 実際の質問 Niuke ライブ クラス分析 5 セットのコードと分析

6. にうけライブ授業の分析(オンライン教育業界)

SQL185 Niuke ライブ コンバージョン率

select course_id,
course_name,
round(sum(if_sign)/sum(if_vw)*100,2) as sign_rate
from course_tb
join behavior_tb using(course_id)
group by course_id,course_name
order by course_id

SQL186 にうけ生放送開始時の各ライブルームのオンライン人数

select course_id,
course_name,
count(distinct user_id) as online_num
from course_tb
join attend_tb using(course_id)
where time(in_datetime)<='19:00:00'
    and time(out_datetime)>='19:00:00'
group by course_id,course_name
order by course_id

SQL187 にうけ生放送 科目別平均視聴時間

  1. 初めてこのように書いたとき、SQLコースの時間が少なすぎることがわかりました。質問をよく読んだところ、視聴時間は生放送室を出る時間と生放送室に入る時間の差として定義されており、単位は分であることがわかりました。私が彼のために定義した時間は、私が考えすぎているため、コースの合計時間を超えません. . .
select course_name,
round(avg(
    if(timestampdiff(second,in_datetime,out_datetime)/60>120
    ,120,
    timestampdiff(second,in_datetime,out_datetime)/60)
    ),2) as avg_Len
from course_tb
join attend_tb using(course_id)
group by course_name
order by avg_Len desc
  1. 正解は次のとおりです。
select course_name,
round(avg(timestampdiff(second,in_datetime,out_datetime)/60),2) as avg_Len
from course_tb
join attend_tb using(course_id)
group by course_name
order by avg_Len desc

SQL188 各教科の生受生放送出席率

  1. 注: テーブル a とテーブル b の間には user_id と course_id の 2 つの接続があり、テーブル b にはテーブル a が含まれているため、右結合が使用されます。右が追加されていない場合、表 b の内容の一部が欠落し、回答の SQL の出席出力が間違っています。
  2. 最後から 2 番目の行は b.course_id=c.course_id であり、a.course_id=c.course_id ではありません。テーブル b の代わりにテーブル a を接続すると、プロンプト 1 と同様の状況が発生します. 出力結果はテーブル a に基づいており、テーブル b の内容の一部が欠落しています.答えも間違っているでしょう。
select 
c.course_id,
course_name,
round(
count(distinct if(timestampdiff(second,in_datetime,out_datetime)>=600,a.user_id,null))*100
/count(distinct if(if_sign=1,b.user_id,null))
,2) as attend_rate
from attend_tb as a
right join behavior_tb as b on a.user_id=b.user_id and a.course_id=b.course_id
join course_tb as c on b.course_id=c.course_id
group by c.course_id,course_name
order by c.course_id

SQL189 Niuke Live Online 同時被験者数

  1. この質問はSQL163に似ています各記事を同時に見ている最大人数、計算方法は同じです

  2. 最初のステップは、ユーザーをライブ ブロードキャスト ルームに入らせ、uv を 1 に割り当て、ユーザーをライブ ブロードキャスト ルームから退出させ、uv を -1 に割り当てます。
    合計 24 レコード

  3. 2 番目のステップでは、ウィンドウ関数での並べ替えには累積的な効果があるため、ウィンドウ関数を使用してライブ放送ルームのユーザーの瞬間数を計算できます。
    ここに画像の説明を挿入

  4. 3 番目のステップは、各科目のライブ ルームの瞬間最大値を取得し、course_id で並べ替えることです。
    ここに画像の説明を挿入

select 
course_id,
course_name,
max(uv_cnt) as max_num
from (
    select
    course_id,
    course_name,
    sum(uv)over(partition by course_id order by dt,uv desc) uv_cnt
    from (
        select 
        course_id,
        user_id,
        in_datetime as dt,
        1 as uv 
        from attend_tb
        union all
		select 
        course_id,
        user_id,
        out_datetime as dt,
        -1 as uv 
        from attend_tb
        ) as a
    join course_tb using(course_id)
    ) as b
group by course_id,course_name
order by course_id

おすすめ

転載: blog.csdn.net/qq118640594X/article/details/127378315
おすすめ