LeetCode-1126. アクティブなビジネスの照会(中程度)


イベントテーブル:Events
+---------------+---------+ | Column Name   | Type    | +---------------+---------+ | business_id   | int     | | event_type|varchar||occurences|int|+--------------+----+-----+このテーブルのプライマリ・キーは(ビジネス_id,event_type)です.テーブルの各行には、あるタイプのイベントがあるビジネスで複数回発生した情報が記録されます. 
すべてのアクティブなビジネスを検索するためにSQLを書きます.
1つのビジネスのイベント・タイプの発生回数が、すべてのビジネスにおけるこのイベント・タイプの平均発生回数よりも大きく、ビジネスに少なくとも2つのイベント・タイプがある場合、ビジネスはアクティブなビジネスと見なすことができる.
クエリ結果のフォーマットは次のとおりです.
Events table: +-------------+------------+------------+ | business_id | event_type | occurences | +-------------+------------+------------+ | 1           | reviews    | 7          | | 3           | reviews    | 3          | | 1           | ads        | 11         | | 2           | ads        | 7          | | 3           | ads        | 6          | | 1           | page views | 3          | | 2           | page views | 12         | +-------------+------------+------------+
結果表+---------------------+|ビジネス_id|+--------------+|1|+---------------------+'reviews'、'ads'、'page views'の総平均発生回数はそれぞれ(7+3)/2=5、(11+7+6)/3=8、(3+12)/2=7.5であった.idが1の業務は7つの'reviews'イベント(5より大きい)と11つの'ads'イベント(8より大きい)があるので、活発な業務です.
ソース:力ボタン(LeetCode)リンク:https://leetcode-cn.com/problems/active-businesses著作権はインターネットの所有に帰属する.商業転載は公式の授権に連絡してください.非商業転載は出典を明記してください.
質問:
考え:
問題を解く:
構想:中のサブクエリは各種eventsの出現の平均値を計算して、外層はそれによってevent_typeはjoinを行い、付加条件はeventsである.occurences>temp.avg_occ、これにより平均数より大きいすべてのeventとそれに対応するビジネスを見つけることができます.id.最後にビジネスを保証するためにidの出現回数は1回を超え,group by+count操作に専念した.
select business_id 
from Events join(
    select event_type, avg(occurences) avg_occ
    from Events 
    group by event_type
) as temp
on events.event_type = temp.event_type and events.occurences>temp.avg_occ
group by business_id
having count(*)>1

知識点: