繁体   English   中英

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

[英]SQL Select row with value between two column values

假设我有这张桌子

 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 <X上进行选择,但是我觉得有一种更优雅的方法。

获取所有小于当前数量的价格列表,然后按count字段排序(降序排列),仅获得1个结果。

例如,您可能想使用小于或等于 200的范围而不是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  |

在数据库小提琴上查看

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM