2016-04-26 5 views
1

Ich habe die folgende Tabelle:verfeinern aus den Ergebniswert von Reihen gruppiert (nicht VIEW erstellen kann, weil Abfrage enthält subquery)

---------------------------- 
| id | product | price | 
---------------------------- 
| 1 | 1  | 50  | 
| 2 | 1  | 39  | 
| 3 | 1  | 60  | 
---------------------------- 

Was ich brauche, ist der niedrigste Preis (39) nach Produkt geordnet zu erhalten (1) und behalten Sie die ID (2) des niedrigsten Preises.

Ich habe diese Abfrage

SELECT 
    id, 
    product, 
    MIN(price) AS price 
FROM 
    variant 
GROUP BY 
    product 

, dass die Ergebnisse auf

---------------------------- 
| id | product | price | 
---------------------------- 
| 1 | 1  | 39  | 
---------------------------- 

Aber das Ergebnis, denn ich bin auf der Suche ist

---------------------------- 
| id | product | price | 
---------------------------- 
| 2 | 1  | 39  | 
---------------------------- 

konnte ich das Ergebnis erhalten mit diesem Abfrage

select B.id, A.* FROM 
(SELECT product,MIN(price) AS minprice 
FROM variant GROUP BY product) A 
JOIN variant B ON A.product = B.product and A.minprice = B.price 

aber ich muss auch eine Sicht mit dieser Abfrage erstellen und da es einen Subselect innerhalb der von gibt, kann ich nicht die Sicht erstellen.

Gibt es einen anderen Weg, um das Ergebnis zu bekommen, das ich gesucht habe?

Ich habe eine Geige gemacht: http://sqlfiddle.com/#!9/d2ddb2

Antwort

0

Sie eine andere Ansicht als die Unterabfrage erstellen können, dann Ihre Ansicht erstellen mit dem ersten Blick Verbinden statt einer Unterabfrage.

CREATE VIEW min_variant AS 
SELECT product,MIN(price) AS minprice 
FROM variant 
GROUP BY product; 

CREATE VIEW min_product AS 
SELECT B.id, A.* 
FROM min_variant A 
INNER JOIN variant B 
ON A.product = B.product 
AND A.minprice = B.price; 

http://sqlfiddle.com/#!9/ea16c6/1