首页 > 解决方案 > 如何编写 Mysql 查询以将变量值与列值进行比较并获得最高记录或第二高记录

问题描述

我在 mysql 中有很少记录的表,所以我想将值与价格列进行比较。

  1. 如果从变量传递的值小于价格列值,则获取产品 id ="p1" 的第二高记录
  2. 如果从变量传递的值大于价格列值,则获取产品 id=“p1”的最高记录

这是我的桌子

id  product price
1   p1    2000
2   p2    3000
3   p3    4000
4   p1    2500

如果我们想将“价格”列与价值 $var='1800' 和 product="p1" 进行比较,那么输出应该是第二高的记录,因为变量值小于价格列值

输出 :

id  product  price
1    p1      2000

但是如果我们为 price 列和 product="p1" 传递值 $var=5000 那么

输出应该是:

id  product  price
4    p1       2500

标签: mysql

解决方案


DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(id SERIAL PRIMARY KEY
,product INT NOT NULL
,price INT NOT NULL
);

INSERT INTO my_table VALUES
(1,1,2000),
(2,2,3000),
(3,3,4000),
(4,1,2500);

mysql> SELECT *, ABS(price-1800) x FROM my_table WHERE product = 1 ORDER BY x LIMIT 1;
+----+---------+-------+-----+
| id | product | price | x   |
+----+---------+-------+-----+
|  1 |       1 |  2000 | 200 |
+----+---------+-------+-----+
1 row in set (0.00 sec)

mysql> SELECT *, ABS(price-5000) x FROM my_table WHERE product = 1 ORDER BY x LIMIT 1;
+----+---------+-------+------+
| id | product | price | x    |
+----+---------+-------+------+
|  4 |       1 |  2500 | 2500 |
+----+---------+-------+------+

推荐阅读