我在生成一個我確信可能的查詢時遇到了問題。我有一個products
表和一個product_changes
表。我想爲每個關聯產品的前30個最低值選擇product_changes.rank
字段的平均值。限制子查詢字段的平均值
下面是相關的表定義:
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
);
這裏就是我想:
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個等級值的結果。這看起來像JOIN
的ON
條款不起作用,但我相信這只是我對某事的誤解。
像往常一樣,表定義和Postgres版本將幫幫我。您提到每個產品的「排名字段」,但我在您的查詢中沒有看到該列... –
已更新的問題包括關於排名字段的表定義和說明。對不起,我花了這麼長時間。這是一個側面項目,只是有時間回到它。現在閱讀答案。 – dbwinger
您可能也想澄清目標。 「每個相關產品的前30個最低值的product_changes.rank字段的平均值是不明確的。我試圖回答*一些*可能的解釋。他們中的一個是你想要的嗎?請澄清。 –