-2

したがって、次の2つのテーブルEmployeeを使用します。

mysql> select * from employee;
+----------+-------+---------+-----------+------------+--------------------------+------+--------+-----------+-----+
| Fname    | Minit | Lname   | SSN       | Bdate      | Address                  | Sex  | Salary | Superssn  | Dno |
+----------+-------+---------+-----------+------------+--------------------------+------+--------+-----------+-----+
| John     | B     | Smith   | 123456789 | 1955-01-09 | 731 Fondren, Cary, NC    | M    |  31500 | 333445555 |   5 |
| Franklin | T     | Wong    | 333445555 | 1945-12-08 | 638 Voss, Cary, NC       | M    |  42000 | 888665555 |   5 |
| Joyce    | A     | English | 453453453 | 1962-07-31 | 5631 Rice, Raleigh, NC   | F    |  26250 | 333445555 |   5 |
| Rameish  | K     | Naraya  | 666884444 | 1952-09-15 | 975 Fire Oak, Angier, NC | M    |  39900 | 333445555 |   5 |
| James    | E     | Borg    | 888665555 | 1927-11-10 | 450 Stone, Cary, NC      | M    |  55000 | NULL      |   1 |
| Jennifer | S     | Wallace | 987654321 | 1931-06-20 | 291 Berry, Garner, NC    | F    |  43000 | 888665555 |   4 |
| Ahmad    | V     | Jabbar  | 987987987 | 1959-03-29 | 980 Dallas, Cary, NC     | M    |  25000 | 987654321 |   4 |
| Alicia   | J     | Zelaya  | 999887777 | 1958-07-19 | 3321 Castle, Apex, NC    | F    |  25000 | 987654321 |   4 |
+----------+-------+---------+-----------+------------+--------------------------+------+--------+-----------+-----+
8 rows in set (0.01 sec)

デパートメント:

mysql> select * from department
    -> ;
+---------+----------------+-----------+
| dnumber | dname          | mgrssn    |
+---------+----------------+-----------+
|       1 | Headquarters   | 888665555 |
|       2 | Development    | NULL      |
|       3 | Sales          | NULL      |
|       4 | Administration | 987654321 |
|       5 | Research       | 333445555 |
+---------+----------------+-----------+
5 rows in set (0.00 sec)

部門の従業員の平均給与が33000を超えるhaving句を使用して情報を組み合わせる必要があります。これは、出力のコピーです。

+--------------+-------------+
| dname        | AVG(salary) |
+--------------+-------------+
| Headquarters |       55000 |
| Research     |       35000 |
+--------------+-------------+

私が今のところどこにいるのかわかりました:

mysql> select d.dname, AVG(salary)
    -> from department as d, employee as e
    -> having avg(salary) > 33000
    -> group by d.dname;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to
use near 'group by d.dname' at line 4
mysql> select d.dname, AVG(salary)
    -> from department as d, employee as e
    -> having avg(salary) > 33000
    -> group by ????

グループに何が欠けていますか?

4

1 に答える 1

1

これと他のすべての質問は、テストやコースをしているように聞こえます。少なくともこれらの質問の1つを自分で解決しようとする時ではないでしょうか。

select
  d.dname,
  AVG(salary)
from
  department d
  inner join employee e on e.Dno = d.dnumber
group by
  d.dname
having
  avg(salary) > 33000

まず、部門と従業員のエイリアスとしてdとeを使用します。クエリのテーブル名の後にエイリアスを指定できます。それらを使用してフィールド名にプレフィックスを付けることができますが、そのフィールドが1つのテーブルにのみ存在する場合はその必要はありません。

内部結合を続けましょう。テーブル間には関係があります。department.dnumberには部門番号が含まれているようです。また、employee.Dnoには、従業員の部門番号が含まれています。テーブルを結合することにより、データを結合します。クエリは、各部門とすべての従業員の行を返します。部門の情報は、返される従業員ごとに複製されます。

集計。_ SQLは多くの集計関数を知っています。'group'するフィールドまたはいくつかのフィールドを選択すると、他のフィールドを使用して'aggregate'することができます。したがって、この場合、部門名でグループ化します。先ほど、部門の情報を複数回、部門の従業員ごとに1回返すと言いました。ここで、このステップでその情報を再度グループ化します。部門名を1回だけ返し、従業員情報を集約します。SUM(salary)この場合、私はAVGを使用して平均給与を計算しますが、部門内のすべての従業員の合計給与を取得したり、部門COUNT(*)ごとの従業員数をカウントしたりするためにも使用できます。

于 2012-12-08T23:45:51.167 に答える