我无法从我的桌子上获得最大和最小值

时间:2016-10-03 20:44:56

标签: sql database firebird

为什么这个查询会返回错误?

select CUSTOMER, TOTAL_VALUE
from CUSTOMER, SALES
where TOTAL_VALUE in (select max(TOTAL_VALUE), min(TOTAL_VALUE)
from SALES)

当我只做max(TOTAL_VALUE)或min(TOTAL_VALUE)时,它完美无缺。但我需要在TOTAL_VALUE中获取最小数字,在TOTAL_VALUE中获取最大数字。任何人都可以帮我弄清楚为什么这个查询对我不起作用?我想保留我拥有的结构(使用in运算符和嵌套子查询)

2 个答案:

答案 0 :(得分:1)

它返回一个错误,因为子查询返回两个值,而不是一个。这是一个修复:

select CUSTOMER, TOTAL_VALUE
from CUSTOMER cross join
     SALES join
     (select max(TOTAL_VALUE) as maxt, min(TOTAL_VALUE) as mint
      from sales
     ) sm 
     where s.total_value in (sm.maxt, sm.mint);

那就是说,查询毫无意义。在那里,您将获得每个客户的清单以及总体最小和最大销售额的值。

这确实回答了你的问题。如果您有其他问题,请在另一个问题中提供样本数据,所需结果。

答案 1 :(得分:0)

试试这个(加入SALES和CUSTOMER表):

select C.CUSTOMER, MIN(TOTAL_VALUE), MAX(TOTAL_VALUE)
from SALES S
join CUSTOMER C on S.Customer_ID=C.Customer_ID
group by C.CUSTOMER
order by C.CUSTOMER