[SQL] 1731. 各マネージャーの下にある従業員の数 (新しいアイデア: 左側のテーブルを決定し、後続のフィールドを順番に追加します)

ここに画像の説明を挿入


leetcode トピックのリンク

注意点

  1. 左側のテーブルを決定し (つまり、結果テーブルの主キーを決定し)、後続のフィールドを順番に追加します。注: 主キーは 1 つのフィールドまたは複数のフィールドである場合があります。
  2. COUNT(DISTINCT()) は、一般に繰り返しを防ぐため、COUNT を使用してカウントする場合、通常は DISTINCT() を実行します。それ以外の場合は、COUNT(1) および COUNT(constant) と同じです。
  3. 一般に、非集計フィールドはグループ化する必要があります。

書き方 1: アイデア: (左側のテーブルを決定し、後続のフィールドを順番に追加します)

select a.employee_id, b.name, reports_count, average_age
from (
  select reports_to as employee_id, 
        count(distinct(employee_id)) as reports_count, round(AVG(age)) as average_age
  from employees
  where reports_to is not null
  group by reports_to
  ) a 
left join (
  select employee_id, name
  from employees
  group by employee_id, name
  ) b
on a.employee_id = b.employee_id
order by employee_id asc

書き方2:内部接続

# 写法二
select a.employee_id, a.name, count(distinct(b.employee_id)) as reports_count, 
       round(avg(b.age)) as average_age 
from employees a
inner join employees b
on a.employee_id = b.reports_to
group by a.employee_id, a.name
# 注意:非聚合字段都要group by

おすすめ

転載: blog.csdn.net/xiaoyue_/article/details/132574044