0

次のクエリを実行します。

SELECT c.CustomerID, c.AccountNumber, COUNT(*) AS CountOfOrders,
    SUM(s.TotalDue) AS SumOfTotalDue
FROM Sales.Customer AS c
INNER JOIN Sales.SalesOrderheader AS s ON c.CustomerID = s.CustomerID
GROUP BY c.CustomerID, c.AccountNumber
ORDER BY c.CustomerID;

COUNT(*) が Sales.Customer の行をカウントすることを期待していましたが、驚いたことに、結合されたテーブルの行数をカウントします。

これはなぜですか?また、どのテーブル COUNT() を操作するかを明示的に指定する方法はありますか?

4

1 に答える 1

3

クエリ処理順序...

FROM 句は SELECT 句の前に処理されます。つまり、SELECT が機能するまでには、選択対象の (仮想) テーブルは 1 つだけです。つまり、結合 (JOIN)の個々のテーブルです。 、フィルタリングされた (WHERE) など。

1 つのテーブルを数えたいだけの場合は、いくつかのことを試すことができます...

COUNT(DISTINCT table1.id)

または、カウントしたいテーブルをその中に count() を含むサブクエリに変えます

于 2013-09-26T20:33:04.363 に答える