0

私は何年もの間単純なMySQLコマンドを使用していて、もっと複雑なコマンドを使いたいと思っていました。古いコードの一部を書き直す作業を引き受けましたが、ここで何が起こっているのかわかりません。

2つのテーブルを1つの結果にマージしようとしていますが、2番目のテーブルは「カウント」のみを提供します。

TABLE customers:
customerID, name, boxID
TABLE codes:
boxID, code, retrieved

私が欲しいのは、SELECT * FROMの顧客から得たものとまったく同じですが、boxIDが同じであるコードテーブル内のすべてのコードのcount()を持つ追加の列が必要です。

これは私の現在のクエリです。

SELECT customers.*, count(codes.code) as codesused 
FROM customers 
INNER JOIN codes 
ON customers.boxID = codes.boxID
WHERE codes.retrieved = 1

これは、「WHEREcustomers.customerID='x'」を追加するまでNULLになります。上記のコードから欲しいものが得られない理由を誰かが説明できますか?

4

1 に答える 1

5

集計関数を他のフィールドと組み合わせる場合は、groupby句を使用する必要があります。このようにクエリを作成できます。

SELECT customerID, name, boxID, count(codes.code) as codesused 
FROM customers 
INNER JOIN codes ON customers.boxID = codes.boxID 
GROUP BY customerID, name, boxID, codesused
HAVING codes.retrieved = 1

また、group byでwhere句を使用することはできないため、HAVINGを使用する必要があります

于 2012-06-19T17:39:55.473 に答える