mysql - 如何编写 Mysql 查询以将变量值与列值进行比较并获得最高记录或第二高记录
问题描述
我在 mysql 中有很少记录的表,所以我想将值与价格列进行比较。
- 如果从变量传递的值小于价格列值,则获取产品 id ="p1" 的第二高记录
- 如果从变量传递的值大于价格列值,则获取产品 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
解决方案
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 |
+----+---------+-------+------+
推荐阅读
- reactjs - 反应上下文 API - 无法从子提供者更新父消费者
- c++ - C ++大括号初始化程序作为参数调用不同的构造函数然后预期
- r - 如何使用带有 purr::map 和 colnames 的代码重命名列名
- kubernetes-ingress - ingress nginx:重写规则逻辑和位置查找
- azure-active-directory - Does the Power BI AD Content Pack support B2C?
- python - Splitting a string at random position and adding resulting parts to a list
- python - What is the time-complexity of the pseudo-inverse in pytorch (i.e. torch.pinverse)?
- jquery - 追加插入字符串而不是 html
- html - 如何修复“底部带有 svg 的英雄图像(波浪)”
- php - How to get specific menu item from a custom Wordpress menu?