2

SQL クエリを実行しようとしていますが、期待どおりの結果が得られませんでした。何がうまくいかないのか本当にわかりません。

(product_id、title)を含むテーブルProductと、(product_variation_id、product_id、説明、性別、価格)を含む他のテーブルProduct_Variationがあります

基本的に、私は製品を持っています。製品ごとに、N 個のバリエーションがあります。

例えば

商品: タイトル「わからない」商品_バリエーション: 説明「Tシャツ」、性別「男性」、価格「59.90」

必要なのは、最低価格の製品のみを表示する Product と Product_Variation を選択することです。

商品にバリエーションとしてTシャツ、ジャケット、その他のものがあるかどうかは気にしません. 最低価格のバリエーションを取得する必要があります。

私のクエリは次のとおりです。

SELECT b.product_id, b.title, MIN(b.price) as price, b.gender

FROM (

        SELECT p.product_id, p.title, MIN(pv.price) AS price, pv.gender
        FROM products p
        join product_variation pv ON pv.product_id = p.product_id
        GROUP BY p.product_id, p.title, pv.price, pv.gender

    ) b     

GROUP BY b.product_id, b.title, b.price, b.gender

Pls、SQL Fiddle の私の例を参照してください

ありがとう!

4

3 に答える 3

1

SQL 2008 を使用ROW_NUMBERしているため、最低価格の行を見つけるために使用できます。

SELECT *
FROM products p
INNER JOIN 
(SELECT 
    product_id,
    Description,
    Gender,
    Price,
    ROW_NUMBER() OVER(PARTITION BY product_id ORDER BY price)  Row
FROM product_variation )
pv ON pv.product_id = p.product_id
AND Row = 1

同じ価格のバリエーションが 2 つある場合は、ランダムな行が 1 つ表示されます。

于 2013-09-26T20:34:50.497 に答える