私はしばらくの間、"Column 'examplecolumn' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause."
エラーで問題を抱えていました。私の誇りに思うほど、最終的な修正はすべての不快な列をGROUP BY
句に追加することでした。いくつかの調査をした後、私はまだあなたに非常に醜いテーブルを与えるのではなく、なぜこのエラーを投げるのかを完全には知ることはできませんが、それは重要な部分ではありません。`GROUP BY`はどの集合メソッドを使用するかをどのように決定するのですか?
私の研究によれば、GROUP BY
は、渡した列に基づいて同じ行をマージすることが重要です。データを一緒に追加する適切な方法を選択する。好奇心のために、私は自分の既存のクエリを複製し、小さな変更を加えました。
元を::
SELECT [ProductName]
,[CompanyName]
,[CategoryID] AS 'CategoryName'
,SUM(Quantity) AS 'Total Ordered'
FROM [Order Details] AS t1
INNER JOIN Products AS t2
ON t1.ProductID = t2.ProductID
INNER JOIN Suppliers AS t3
ON t2.SupplierID = t3.SupplierID
GROUP BY ProductName, CategoryID, CompanyName
変更されたバージョン:
SELECT [ProductName]
,[CompanyName]
,[CategoryID] AS 'CategoryName'
,Quantity AS 'Total Ordered'
FROM [Order Details] AS t1
INNER JOIN Products AS t2
ON t1.ProductID = t2.ProductID
INNER JOIN Suppliers AS t3
ON t2.SupplierID = t3.SupplierID
GROUP BY ProductName, CategoryID, CompanyName, Quantity
を私はGROUP BY
と信じていた作品BYかGROUPの私の理解では、それは私に同じ出力を与えているはず正しかった場合句は集計方法としてSUM(数量)を使用します。それはしませんでした。実際には、エラーメッセージを削除する以外に、どうしたのか分かりません。ここで
それはGROUP BY
の私の理解が間違っている明らかです。私は、集計方法が列挙された列にあるデータの種類によって決まると信じていました。そうではないので、どうすればGROUP BY
が機能しますか?
私はすでに同じテーブル*の主キーでグループ化しているにもかかわらず、わずかな接線で、この集約されていない列を 'GROUP BY' *に含めなければならないという要件は、SQLを持つ私のペットのピープルの1つです。面倒でグループ分けの意図がわかりにくく、情報を不必要に複製してクエリを混乱させるため、クエリを編集する次の人が微妙なバグを導入する可能性が高くなります。データベースの井戸*は、グループ内で複数の値を持つことはないことをキー制約から伝えることができます。重複して指定する必要はありません。 –
@IlmariKaronen - 今私は好奇心が強いです - もしあなたがグループの名前が分かれていれば、あなたは何を集計していますか? –
通常、主キーをグループ化しているテーブルと多対1の関係を持つ別のテーブルのものです。 'CompanyId'が' Companies'テーブルのプライマリキーであるところで、 'SELECT CompanyId、CompanyName、COUNT(EmployeeId)AS EmployeeCount、WebsiteURL ASUs(CompanyId)GROUP BY CompanyId'のようなものです。 (このクエリは、SQL Serverでは当然失敗します。なぜなら、 'CompanyName'と' WebsiteURL'という冗長な列を 'GROUP BY'から除外したからです。) –