2016-12-06 253 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 
     ) 
)