確かに可能なクエリの生成に問題があります。私はproducts
テーブルとproduct_changes
テーブルを持っています。私はproduct_changes.rank
フィールドの平均を各関連製品の上位30個の最小値に選択したいと考えています。ここでサブクエリからのフィールドの平均値の上限
は、関連するテーブル定義です:
SELECT products.id, avg_rank
FROM "products"
JOIN (
SELECT product_id, AVG(rank) avg_rank
FROM product_changes
GROUP BY product_id, rank
ORDER BY rank ASC NULLS LAST
LIMIT 10) pc ON pc.product_id = products.id
WHERE avg_rank IS NOT NULL
LIMIT 10
をしかし、これは私の各行の最安30ランク値の同じ平均を与えている。ここで
CREATE TABLE products (
id integer NOT NULL,
created_at timestamp without time zone
);
CREATE TABLE product_changes (
id integer NOT NULL,
product_id integer,
rank integer,
created_at timestamp without time zone
);
は私がしようとしているものです結果のそれはJOIN
のON
のように思えますが、私は何かを誤解していると確信しています。
をいつものように助けて。あなたは '各製品のランクフィールド'について言及していますが、私はあなたのクエリにその列を表示しません... –
ランクフィールドについてのテーブル定義と説明を含めるように質問が更新されました。ごめんなさい。これはサイドプロジェクトで、ちょうどそれに戻る時間があります。答えを今読んでください。 – dbwinger
目的を明確にすることもできます。 「関連する各製品の上位30個の最小値に対するproduct_changes.rankフィールドの平均」はあいまいです。私はいくつかの*可能な解釈に答えようとしました。あなたが望むものはどれですか?どうか明らかにしてください。 –