2016-12-06 100 views
0

我有以下兩個表格產品和價格。如何返回不同列中的SQL max()值?

價格表如下所示:

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

產品表如下:

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

在奧得知道,我加入了兩個表的任何產品的價格使用起來

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

這給了我以下結果,表明我的價格表中有價格表t不分配給任何產品。

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

我想知道兩件事情,什麼是從價格表中的最高價格,什麼是任何產品都有最高價格是多少?我如何在一個SQL語句中實現這一點?

期望的結果應該是這個樣子:

max_price | max_price_of_product| 
2500  | 2100    | 

我曾嘗試使用兩個SELECT語句與工會合並,但結果出現堆積在一列

非常感謝您!

+0

這似乎是一個很奇怪的表設計,恕我直言。 – Barmar

回答

1

您可以使用MAX()函數中的IF()表達式來獲得所有匹配的價格的最大值Product_ID

SELECT MAX(price) as max_price, MAX(IF(product_id IS NOT NULL, price, null)) AS max_product_price 
FROM price 
LEFT JOIN product ON price.Price_ID = product.Price_ID 
0
select MAX(Price) as max_price from price 
left join product 
    on product.Price_ID = price.Price_ID 

對於MAX_PRICE列,我沒有對max_price_of_product一個足夠的信息。

+0

非常感謝,但是對於我來說同時返回兩個最大值是至關重要的。 max_price_of_product應顯示實際分配給產品的最高價格。在上例中,這是具有「Product_ID」9的產品,因爲最高價格(2500)未分配給任何產品 – AaronDT

0

我相信你一定會需要通過是聯合在一起嵌套的SELECT語句來做到這一點。我確信下面的代碼在語法上不是正確的,但希望能指出你正確的方向。

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 
     ) 
) 
相關問題