2016-12-06 7 views
0

Ich habe die folgenden zwei Tabellen Produkte und Preise.Wie können SQL Max() - Werte in verschiedenen Spalten zurückgegeben werden?

Die Preistabelle sieht wie folgt aus:

Price ID|Price 
6  |1800 
7  |2500 
8  |1800 

die Tabelle Produkt wie folgt:

Product_ID |Price_ID 
1   | 6  
2   | 7  
3   | 8  

In oder den Preis eines Produktes zu wissen, dass ich die beiden Tabellen zusammen

mit verbundenen
select * from price 
left join product 
    on product.Price_ID = price.Price_ID 

was mir das folgende Ergebnis gibt, was darauf hinweist, dass es in meiner Preistabelle Preise gibt t sind keinem Produkt zugeordnet.

Price_ID|Price |Product_ID 
6  |1800 |NULL 
7  |2500 |NULL 
8  |1800 |8 
9  |2100 |9 

ich zwei Dinge wissen will, was ist der Höchstpreis aus der Preistabelle und was ist der maximale Preis, jedes Produkt hat? Wie würde ich dies innerhalb einer SQL-Anweisung erreichen?

Das gewünschte Ergebnis sollte wie folgt aussehen:

max_price | max_price_of_product| 
2500  | 2100    | 

ich versucht hat zwei select-Anweisungen mit Union kombiniert zu verwenden, aber die Ergebnisse in einer Spalte gestapelt erscheinen

Vielen Dank!

+0

Dies scheint wie ein sehr seltsames Tischdesign, IMHO. – Barmar

Antwort

1

Sie können einen IF() Ausdruck in der MAX() Funktion verwenden, um das Maximum aller Preise zu erhalten, die eine übereinstimmende Product_ID haben.

0
select MAX(Price) as max_price from price 
left join product 
    on product.Price_ID = price.Price_ID 

Für die MAX_PRICE Spalte, habe ich nicht genügend Informationen für die max_price_of_product ein.

+0

Vielen Dank, aber es ist wichtig für mich, beide Maximalwerte in einem Ergebnis zurückzugeben. Das Produkt max_price_of_product sollte den maximalen Preis anzeigen, der einem Produkt tatsächlich zugewiesen ist. Im obigen Beispiel wäre dies das Produkt mit "Product_ID" 9, da der Höchstpreis (2500) keinem Produkt zugeordnet ist – AaronDT

0

Ich glaube, dass Sie dies durch verschachtelte SELECT-Anweisungen tun müssen, die zusammen UNIONed sind. Ich bin mir sicher, dass der folgende Code nicht syntaktisch korrekt ist, aber hoffentlich wird er dich in die richtige Richtung weisen.

Select max_price, max_price_of_Product from 
    (SELECT Max(Price) As max_price FROM PriceTable 
    UNION ALL 
    SELECT Max(Price) As max_price_of_product FROM 
     (
      select * from price 
      left join product 
      on product.Price_ID = price.Price_ID 
     ) 
) 
Verwandte Themen