Model Make Price
--------------------------------------
Ford 42 23454
Ford 32 21422
Ford 12 19000
GM 12 14343
GM 32 21345
GM 14 12343
BMW 32 43355
这是一个示例表(简化)。我想要做的是找到最接近每个模型的输入的价格。然后返回最接近的模型,品牌和价格。
例如,$ 20,000。结果将是:
Model Make Price
----------------------
1) Ford 12 19000 ($1000 difference)
2) GM 32 21345 ($1234 difference)
3) BMW 32 43355 ($23355 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;
内心并没有只返回最小的差异而是全部。不知道如何纠正这个。
感谢。
答案 0 :(得分:3)
只需使用ORDER BY
和LIMIT
:
SELECT t.*, ABS(20000 - price) as difference
FROM table t
ORDER BY ABS(20000 - price)
LIMIT 3;
您可以将LIMIT
增加或减少到您想要的多行。
您的查询存在的问题是您要加入model
和price
,而不是加入difference
。
编辑:
对于每个模型一行,使用窗口函数:
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);