0

就職の面接に向けて SQL の練習をしていて、助けが必要です。友人は、私がテーブルを作成し、結合を学習するところまで行くことを提案しました。私はSQLフィドル、Oracle 11g R2を使用しています。

私のテーブルは次のようになります

--------------------------
| ID | Name | Manager_ID | 
--------------------------

ここで、0 でない Manager_ID (マネージャー) は、特定のマネージャーの主キーに関連する外部キーを持つ従業員です。

マネージャーに報告する従業員の数を調べて、次のように表示しようとしています。

--------------------
| Name | Employees | 
--------------------

これは私がこれまでに持っているものです。左側のフィールドに名前をリストする方法がわかりません.

SELECT COUNT(b.manager_id) as "Manages"
FROM employees a, employees b
WHERE b.manager_id > 0 
AND a.id = b.manager_id
GROUP BY a.id  
/

助けてくれてありがとう。基本的なことを守ってください、私はまだ初心者です。

4

2 に答える 2

3

頭の体操があります: 3 列のテーブル (id、employee、manager_id) が 6 列のテーブル (employee.id、employee.name、employee.manager_id、manager.id、manager.name、manager_id) であると想像してください。最後の 3 つの列は、単一の id-column に圧縮されています。

あなたの場合、それは同じテーブルですが、ほとんどの場合そうではないため、参照されたテーブルの列のセットで列 ID (外部キー) を精神的に置き換えるのは非常に簡単です (id=primary key)。

通常、外部テーブルは国または製品ラインのリストであり、メイン テーブルの複数の行で繰り返されます。同じ manager_id が複数の行に表示されるのと同じです。

外部テーブルの一部の行が使用されていない場合 (すべての従業員がマネージャーであるとは限りません) は問題ありませんが、メイン テーブル ID が外部テーブルに存在しない ID (マネージャー) を参照しようとすると、致命的なエラーが発生します。少なくとも 1 人の従業員を管理する必要があります)。従業員にマネージャーがいないことを示すには、存在しない employee.manager_id を入力します。0 を選択します。通常は NULL を使用します。

  • マネージャーを持つすべての従業員 (CEO 以外の全員) の完全なテーブルを一覧表示するには、次のクエリを実行します。

    SELECT * FROM employee empl JOIN employee mngr ON empl.manager_id = mngr.id
    

    または(同じ)

    SELECT * FROM employee empl, employee mngr WHERE empl.manager_id = mngr.id
    
  • マネージャーのいない従業員 (全員) を含むすべての従業員の完全なテーブルを一覧表示するには

    SELECT * FROM employee empl LEFT JOIN employee mngr ON empl.manager_id = mngr.id
    

あなたの質問は、管理されている従業員の数を含むマネージャーのリストを取得することです。したがって、 id=0 の従業員がいないとします:

    SELECT manager.name, COUNT(*)
    FROM   employee empl, employee mngr
    WHERE  empl.manager_id = mngr.id
    GROUP BY mngr.id

すべての従業員を含めるには、0 人の従業員を管理している従業員も含めて、演習として left (左結合) を使用します。

于 2013-03-04T21:46:33.940 に答える
2

あなたはここにかなり近づいています。すでにマネージャーごとにグループ化しています。選択したマネージャーの名前が必要なだけです

SELECT  a.name, COUNT(b.manager_id) as "Employees"
FROM employees a, employees b
WHERE b.manager_id > 0 
AND a.id = b.manager_id
GROUP BY a.name, a.id 
于 2013-03-04T20:42:51.833 に答える