26

従業員の月給のリスト(表)がある例を見ました。私は給与の合計を計算し、出力にまったく同じテーブルを見ました。それは奇妙でした。

これがやらなければならないことです-私たちは今月、従業員の給与としていくら支払うかを知る必要があります。そのためには、次のようにデータベースで給与額を合計する必要があります。

SELECT EmployeeID, SUM (MonthlySalary) 
FROM Employee
GROUP BY EmpID

GROUP BY上記のコードで使用しないとエラーが発生することはわかっています。これは私が理解していないことです。

EmployeeテーブルからEmployeeIDを選択しています。SUM()EmployeeテーブルからMonthlySalary列を追加する必要があると言われています。したがって、それらをグループ化してから追加するのではなく、直接行ってそれらの番号を追加する必要があります。

それが人のやり方です-従業員テーブルを見て、すべての数字を追加します。なぜ彼らはそれらをグループ化してからそれらを合計するのに苦労するのでしょうか?

4

4 に答える 4

54

説明のために、GROUPBYを「foreach」と考えると簡単な場合があります。以下のクエリ:

SELECT empid, SUM (MonthlySalary) 
FROM Employee
GROUP BY EmpID

言っている:

「各empidのMonthlySalaryの合計を教えてください」

したがって、テーブルが次のようになっている場合:

+-----+------------+
|empid|MontlySalary|
+-----+------------+
|1    |200         |
+-----+------------+
|2    |300         |
+-----+------------+

結果:

+-+---+
|1|200|
+-+---+
|2|300|
+-+---+

1つの数値の合計がその数値であるため、Sumは何もしないように見えます。一方、次のようになっている場合:

+-----+------------+
|empid|MontlySalary|
+-----+------------+
|1    |200         |
+-----+------------+
|1    |300         |
+-----+------------+
|2    |300         |
+-----+------------+

結果:

+-+---+
|1|500|
+-+---+
|2|300|
+-+---+

次に、合計する2つのempid1があるためです。この説明が役立つかどうかはわかりませんが、もう少し明確になることを願っています。

于 2012-12-21T23:41:43.520 に答える
9

すべての数値を合計したい場合は、GROUPBYはありません。


SELECT SUM(MonthlySalary) AS TotalSalary
FROM Employee
+-----------+
|TotalSalary|
+-----------+
|777400     |
+-----------+

GROUP BYのポイントは、従業員ごとに個別の合計を取得することです。

+--------+------+
|Employee|Salary|
+--------+------+
|John    |123400|
+--------+------+
|Frank   |413000|
+--------+------+
|Bill    |241000|
+--------+------+
于 2012-12-21T23:37:00.463 に答える
8

悲しいことに、提案している構文をサポートするデータベースが1つあります。

SELECT EmployeeID, SUM (MonthlySalary) 
FROM Employee

ただし、MySQLは期待どおりの動作をしません。これは、すべての人のMonthlySalaryの合計と、任意の1つのEmployeeIdを返します。悲しいかな。

あなたの質問はSQL構文についてです。答えは、SQLがどのように定義されているかであり、変更されることはありません。句から集計フィールドを決定するSELECTことは不合理ではありませんが、この言語がどのように定義されているかではありません。

しかし、私はその質問にいくらか同情しています。SQLを学ぶ多くの人々は、「グループ化」を行のソートのコンテキストで行われるものと考えています。「米国の都市を並べ替えて、出力で州ごとにグループ化する」などです。理にかなっています。しかし、SQLの「groupby」は、実際には「まとめる」ではなく「要約する」ことを意味します。

于 2012-12-22T00:19:44.593 に答える
2

指定しない場合GROUP BY、集計関数は選択したすべてのレコードに対して機能します。その場合、のような特定の列も選択しても意味がありませんEmployeeID。従業員ごとの合計が必要な場合は、従業員IDを選択して従業員ごとにグループ化するか、テーブル全体の合計が必要なため、従業員IDとGROUP BY句を省略します。

クエリで、を省略した場合GROUP BY、どの従業員IDを表示しますか?

于 2012-12-21T23:40:16.763 に答える