SQL 查询,MIN 不只返回最低值

SQL Query, MIN isn't returning just the lowest value

Model          Make          Price
--------------------------------------
Ford            42            23454
Ford            32            21422
Ford            12            19000
GM              12            14343
GM              32            21345
GM              14            12343
BMW             32            43355

这是一个示例 table(已简化)。我想要做的是为每个模型找到最接近输入的价格。然后 return 最接近的型号、品牌和价格。

例如,20,000 美元。结果将是:

   Model  Make  Price
 ----------------------
1) Ford    12    19000        (00 difference)
2) GM      32    21345        (34 difference)
3) BMW     32    43355        (355 difference)

这是我当前的 SQL(使用 Postgres):

SELECT model, make, price, difference
FROM (
   SELECT model, price, MIN(ABS(20000 - price)) as difference 
   FROM table
   GROUP BY model, price)
INNER JOIN ON model, price;

内部不只是 return 最小差异,而是所有差异。不确定如何更正此问题。

谢谢。

只需使用 ORDER BYLIMIT:

SELECT t.*, ABS(20000 - price) as difference 
FROM table t
ORDER BY ABS(20000 - price)
LIMIT 3;

您可以根据需要增加或减少 LIMIT 行数。

您查询的问题是您是在 modelprice 上加入,而不是在 difference 上加入。

编辑:

对于每个模型一行,使用 window 函数:

SELECT t.*, ABS(20000 - price) as difference
FROM (SELECT t.*,
             ROW_NUMBER() OVER (PARTITION BY model ORDER BY ABS(20000 - price)) as seqnum 
      FROM table t
     ) t
WHERE seqnum = 1;
ORDER BY ABS(20000 - price);