0

私は2つのテーブルを持っています:

1.アイテム

+-------+---------+
|itemID | itemName|
+-----------------+
|1      | Item1   |
|2      | Item2   |
+-------+---------+

2.購入

+-----------+--------+--------+-----------+
|purchaseID | userID | itemID | itemAmount|
+-----------+--------+--------+-----------+
|1          | 1      | 1      | 3         |
|2          | 2      | 1      | 4         |
|3          | 1      | 2      | 5         |
+-----------+--------+--------+-----------+

私のMySQLコードの簡略版はこれです:

SELECT
    items.itemID,
    SUM(purchases.itemAmount)
FROM items
    LEFT OUTER JOIN purchases ON items.itemID = purchases.itemID

私は結果がこれであることを望みます:

+-------+-----------+
|itemID | itemAmount|
+-------------------+
|1      | 7         |
|2      | 5         |
+-------+-----------+

しかし、代わりに、これは結果です:

+-------+-----------+
|itemID | itemAmount|
+-------------------+
|1      | 12        |
+-------+-----------+

これはなぜですか、どうすれば修正できますか? ありがとう :)

4

1 に答える 1

3

クエリの最後に次を追加します。

GROUP BY items.itemID

これが発生する理由は、itemId ごとに amount 列を合計する必要があることを SQL エンジンが認識していないためです。それは単にそれらすべてを合計します。この動作を変更したい場合は、それが GROUP BY の目的です。MINこれは、他のすべての集約関数 ( 、MAXCOUNTなど)にも当てはまります。

「( ) を選択するように指示した内容でグループ化する方法がわからない場合SELECT itemId ...、なぜ値が返されるのです1か?」と思うかもしれません。これは素晴らしい質問です。実際に返される値は、ほとんどの場合予測不可能です。実際には、ある時点で返さ2れるか、テーブル内の他の itemId が開始される可能性があります。このため、多くの SQL エンジンは、GROUP BY 句に含まれていない非集計を指定することを許可していません。つまり、これを試みると、エラーがスローされます。MySQL はこの問題を気にせず、予測不可能な結果を​​返します。

于 2013-08-26T16:30:23.490 に答える