0

これが間違った GROUP BY の使用法と見なされるのはなぜですか?

SELECT Empno, Deptno,
SUM(Sal) "Total"
FROM Emp
GROUP BY Deptno;

私のメモに与えられた結果は次のとおりです。

Empno   Deptno Total
------- ------ --------
?       10     8750
?       20     10875
?       30     9400

理由:

SELECT リストのすべての列は、GROUP BY に含まれているか、集計されている必要があります。

でも意味がよくわからない…。

4

6 に答える 6

2

結果から選択Empnoしています。これは複数の行の集計関数ではなく、グループ化の一部でもないため、クエリに含める意味がありません。同じ部門の異なる従業員の 2 つの行から、どのような結果が得られると思いますか? たとえば、次のデータを考えてみましょう。

Empno    Deptno    Sal
    1         1    100
    2         2    200
    3         2    200

結果はどうあるべきですか?

于 2012-04-16T12:49:07.563 に答える
2

Empno と Deptno の両方が選択されているため、両方のフィールドでグループ化する必要があります。

SELECT Empno, Deptno, SUM(Sal) "Total"
FROM Emp
GROUP BY Empno, Deptno;

または、Empno が使用されていない場合は、Deptno を選択します。

SELECT Deptno, SUM(Sal) "Total"
FROM Emp
GROUP BY Deptno;
于 2012-04-16T12:50:39.620 に答える
1

グループ化された結果を要求する場合、返されるフィールドは、group by 句または集計関数のいずれかの部分である必要があります。

何故ですか?

テーブル Emp の次のデータを想像してください。

Empno   Deptno
1       1
2       1
3       2
4       2

選択を実行すると、2 つのグループ (Deptno 1 と 2) が表示されます。これらの場合、Empno に対してどのデータを表示する必要がありますか? エンジンは判断できません。

したがって、選択はさまざまな方法で修正できます。

SELECT Empno, Deptno,
SUM(Sal) "Total"
FROM Emp
GROUP BY Empno, Deptno;

Empno と Deptno の両方のグループ、またはおそらく:

SELECT Max(Empno), Deptno,
SUM(Sal) "Total"
FROM Emp
GROUP BY Deptno;

これは Deptno によってグループ化され、1 つの Empno (グループの最大値) のみを与えます。

于 2012-04-16T13:00:41.083 に答える
1

これを試して-

SELECT group_concat(Empno), Deptno,
SUM(Sal) "Total"
FROM Emp
GROUP BY Deptno;
于 2012-04-16T12:50:36.000 に答える
1

エラーメッセージは非常に明確です:エラーは、選択リストに「裸の」従業員番号があるためですが、それによってグループ化していないためです(従業員番号が一意であると仮定すると、これは理にかなっています:それはあなたのgroup by役に立たないでしょう) )。

すべての従業員に支払われる給与の合計を部門別に探している場合は、従業員番号を削除するだけです。

SELECT Deptno, SUM(Sal) "Total"
FROM Emp
GROUP BY Deptno
于 2012-04-16T12:53:57.063 に答える
1

あなたが探しているのは次のことだと思います:

SELECT Empno, Deptno,
SUM(Sal) "Total"
FROM Emp
GROUP BY Empno, Deptno;

Empno は各 Deptno で同じであると想定しているため、このフィールドでグループ化する必要はありませんが、構文的には正しくありません。

于 2012-04-16T12:57:14.187 に答える