mysql - 如何查询价格和数量组合小于另一个的产品
问题描述
我有这个示例服务表,我在其中维护了我作为产品销售的按摩服务的记录。
||ID||Duration||Price||
|1 |100 |10.0|
|2 |200 |20.0|
|3 |300 |30.0|
|4 |400 |25.0|
|5 |500 |50.0|
加班,我添加比现有产品更具竞争力的新产品(价格和持续时间的组合)以吸引更多客户。我想查找过时的记录。当您需要付出更多而获得更少时,它被认为是过时的。在上面的示例中,ID 为 3 的记录已过时。
我如何编写查询来实现这一点?
解决方案
过时的按摩是一种价格高于任何持续时间更长的按摩的按摩
可以使用这种查询来检索过时的按摩:
SELECT m1.*
FROM massages m1
JOIN massages m2
ON m1.Price > m2.Price
AND m1.Duration <= m2.Duration
然后,此查询可用于在查询中查找要删除的按摩DELETE
:
架构(MySQL v5.7)
CREATE TABLE massages (
`ID` INTEGER,
`Duration` INTEGER,
`Price` INTEGER
);
INSERT INTO massages
(`ID`, `Duration`, `Price`)
VALUES
(1, 100, 10.0),
(2, 200, 20.0),
(3, 300, 30.0),
(4, 400, 25.0),
(5, 500, 50.0);
-- -------------------------- This is what you are looking for --------------------------
DELETE FROM massages
WHERE massages.ID IN
(
SELECT id FROM
(
SELECT m1.ID AS id
FROM massages m1
JOIN massages m2
ON m1.Price > m2.Price
AND m1.Duration <= m2.Duration
) AS IdsToDelete
);
-- --------------------------------------------------------------------------------------
查询 #1
SELECT * FROM massages;
输出
| ID | Duration | Price |
| --- | -------- | ----- |
| 1 | 100 | 10 |
| 2 | 200 | 20 |
| 4 | 400 | 25 |
| 5 | 500 | 50 |
推荐阅读
- python - pandas groupby 两个数据框不合并
- javascript - Ant Design - 以编程方式从 Menu.Item 取消选择/删除活动状态
- android - 如何使用 remove_widget() 函数?
- azure - 我能否创建具有 5 个知识库和基本定价层的 Azure QnA Maker?
- jira - Jira JQL - 显示所有子任务
- css - 匹配动画光标的颜色和内部跨度
- laravel - SQLSTATE [42S22]:未找到列:1054 'where 子句'中的未知列'标题'(SQL:选择计数(*)
- jquery - jQuery .trigger() 未在 Internet Explorer 上触发
- hive - 动态分区插入 Hive
- node.js - 如何从子文件夹中的文件导入 npm 模块?