私のアプリケーションで使用されるいくつかのテーブルがあります。 1つは製品のリストを維持し、もう1つはそれらのアイテムに対するコメントを維持し、別のものはそれらのアイテムの星評価を含み、最後にはそれらのアイテムの購入がある。私はこれに似た何かを持っていたが、それは間違ったデータを返すクエリのヘルプが必要 - 集約と複数の結合
* The design ID
* The average rating
* The number of comments
* The number of purchases
:
を私は次のことを返すクエリを実行したいと思いますtbl_item:
---------
id INT (primary key)
name VARCHAR (product name)
tbl_comment:
------------
id INT (primary key)
item_id INT (foregin key -> tbl_item.id)
commenttext VARCHAR
tbl_rating:
-----------
id INT (primary key)
item_id INT (foreign key -> tbl_item.id)
rating DOUBLE
tbl_purchases:
--------------
id INT (primary key)
item_id INT (foreign key -> tbl_item.id)
:私のテーブルには、次のようになり
SELECT d.id ,
COUNT(tbl_purchases.id) AS purchase_count,
COUNT(tbl_comment.id) AS comment_count,
AVG(tbl_rating.rating) AS item_rating,
FROM tbl_item d
LEFT JOIN tbl_purchases ON tbl_purchases.item_id = d.id
LEFT JOIN tbl_comment ON tbl_comment.item_id = d.id
LEFT JOIN tbl_rating ON tbl_rating.id = d.id
GROUP BY d.id;
私が見つけたのは、私のCOUNT()列が両方の列に同じ値を返すということです。間違いは間違いです。明らかに、私は自分の結合やGROUP BYで何か間違っていますが、私は完全に何がわかりません。私はJavaの男でSQLの人ではないので、このSELECT文で何がうまくいかないのか分かりません。
誰でも私にこのクエリの作成に手を差し伸べることはできますか?このようにいくつかの異なるテーブルでこの集約クエリを実行する方法はありますか?ありがとう!!
最終的な結果セットをカウントしているのでカウントが戻ります(ヌルかどうかは関係ありません)。あなたはテーブルごとに別々のカウントをしたい場合、私はサブクエリを調べることをお勧めします。 – Limey
また、変数を設定し、caseステートメントで各テーブルの合計を手動で追跡することもできます。 – Limey
サブクエリを使用してこれをどのように実行するかの例を教えてください。私が言ったように、私はJavaの男であり、SQLでひどく経験はありません。 – Shadowman