SQL选择行,其值介于两个列值之间

时间:2019-01-28 10:44:19

标签: sql postgresql

假设我有这张桌子

 id  | item_id | count | price 
-----+---------+-------+-------
 127 |       8 |   100 |  2.16
 128 |       8 |   200 |  1.23
 129 |       8 |   300 |  0.91
 130 |       8 |   400 |  0.76
 131 |       8 |   500 |  0.66
 132 |       8 |   600 |  0.54
 133 |       8 |   700 |  0.49
 134 |       8 |   800 |  0.47
 135 |       8 |   900 |  0.45
 136 |       8 |  1000 |  0.41
 137 |       8 |  1500 |  0.36

这意味着,如果客户订购200至300件商品,则价格为1.23。我想找到X件商品的价格。我可以修改表并创建count_min和count_max字段,然后在count_min> = X和count_max

1 个答案:

答案 0 :(得分:2)

获取所有低于当前价格的价格列表,然后在count字段中进行排序(降序排列),仅得到1个结果。

例如,如果200应该包含在200-300范围内而不是100-200范围内,则可能要使用小于或等于

架构(PostgreSQL v10.0)

CREATE TABLE priceListing (
  "id" INTEGER,
  "item_id" INTEGER,
  "count" INTEGER,
  "price" FLOAT
);

INSERT INTO priceListing
  ("id", "item_id", "count", "price")
VALUES
  (127, 8, 100, 2.16),
  (128, 8, 200, 1.23),
  (129, 8, 300, 0.91),
  (130, 8, 400, 0.76),
  (131, 8, 500, 0.66),
  (132, 8, 600, 0.54),
  (133, 8, 700, 0.49),
  (134, 8, 800, 0.47),
  (135, 8, 900, 0.45),
  (136, 8, 1000, 0.41),
  (137, 8, 1500, 0.3);

查询#1

SELECT "price"
FROM priceListing
WHERE "count" < 250 -- Arbitrary value for the range 200 - 300
ORDER BY "count" DESC
LIMIT 1;

输出

| price |
| ----- |
| 1.23  |

View on DB Fiddle