2017-05-05 11 views
1

どのようにDISTINCT関数を1つの列だけにすることができますか?MySQLのDISTINCTを1列で

SELECT DISTINCT 
    id AS uniqueid, 
    ProductCode AS ProductID, 
    DisplayName AS ReportingLabel, 
    REPLACE(URL, 'http', 'https') AS URL, 
    ProductCategory AS Category, 
    Description, 
    CONCAT('https://', ImageURL) AS Image, 
    latestSellingPrice AS Price, 
    Brand, 
    IF(latestSellingPrice > 300, 
     'TRUE', 
     'FALSE') AS Is_Default, 
    IF(StockAvailable > 0, 'TRUE', 'FALSE') AS InStock 
FROM 
    XML_Import_Server 
WHERE 
    Brand = 'Totalsports' 
AND 
    DisplayName <> 'eGift Card' 

ProductCodeは、サイズと色のオプションのために必ずしも一意ではありません。しかし、私はそれの最初の変種を引く必要があります。

+0

「DISTINCT」は省略形です。完全なフォームは 'DISTINCT ROW'です。 1つの列のみを使用する場合は、その列に同じ値を持ち、他の列に異なる値を持つ2つ以上の行がある場合、どの行を選択しますか? – axiac

+0

あなたが望むことをするにはここで 'GROUP BY'を使う必要があると思います。あなたは 'DISTINCT'を使うことができますが、あなたが必要とする行は正しくグループ化することが必要です。 –

答えて

1

あなたはそれはあなたが第一の変形によって何を意味するかは明らかではありませんいくつかの列の などにより

SELECT DISTINCT 
    id AS uniqueid, 
    min(ProductCode) AS ProductID, 
    DisplayName AS ReportingLabel 

FROM 
    XML_Import_Server 
WHERE 
    Brand = 'Totalsports' 
AND 
    DisplayName <> 'eGift Card'  
group by id, DisplayName 
+0

ありがとうございます! – Charl

1

をaggregatio機能とグループを使用することができます。だから私はあなたが最も低いid値を持つバリアントを意味すると推測します。

メインテーブルにサブクエリを結合してこれを行います。サブクエリは、関連する値idを検索します。

    SELECT MIN(id) id 
         FROM XML_Import_Server 
        GROUP BY ProductCode 

それはあなたにそれぞれ異なるProductCode値のための正しい選択を与える自分を納得させるために、これを試してみてください。

次に、メインクエリにそれを参加させてください。

SELECT DISTINCT 
    a.id AS uniqueid, 
    a.whatever, 
    a.whatever 
FROM 
    XML_Import_Server a 
JOIN (
         SELECT MIN(id) id 
          FROM XML_Import_Server 
         GROUP BY ProductCode 

    ) b ON a.id = b.id 
WHERE 
    a.whatever = whatever 
関連する問題