ステップでこのステップを実行します。
第1工程:人に報告をどのように多くの社員数を。
select reportsto, count(*) from employee group by reportsto;
ほとんどの記者をしている人を取得するように我々は、COUNT(*)で、この結果を注文すると、1行のみ取得することを制限することができます。問題となるのは、同点の場合、つまり2人の記者が同じ最高額の記者を抱えている場合、何をすべきか? SQLiteはここではあまり役に立ちません。
select reportsto
from employee
group by reportsto
having count(*) =
(
select count(*)
from employee
group by reportsto
order by count(*) desc
limit 1
);
次のステップ:名前を取得します。つまり、テーブルに再度アクセスする必要があります。
select
firstname || ' ' || lastname as manager
from employee
where e1.employeeid in
(
select reportsto
from employee
group by reportsto
having count(*) =
(
select count(*)
from employee
group by reportsto
order by count(*) desc
limit 1
)
);
最後のステップ:見つかった管理者自身が報告した人を取得します。これらは多くの場合がありますので、マネージャーごとにグループ化し、報告するすべてのものを連結します。
select
e1.firstname || ' ' || e1.lastname as manager,
group_concat(e2.firstname || ' ' || e2.lastname) as reportsto
from employee e1
join employee e2 on e2.employeeid = e1.reportsto
where e1.employeeid in
(
select reportsto
from employee
group by reportsto
having count(*) =
(
select count(*)
from employee
group by reportsto
order by count(*) desc
limit 1
)
)
group by e1.firstname || ' ' || e1.lastname;
あなたはあなたの質問を言い換えることができます。あなたが達成したいことはあまり明白ではありません。例が役立つかもしれません。 – Yahya
これを編集しましたが、これがややクリアしてくれることを願っています – TheFullMonty