mysql - 仅对 MySQL 结果中的 id 重复列
问题描述
我在编写 MySQL 查询时遇到了一个问题。有两个表:
订单:
| id | item_id | delivery_charges |
|------|---------|------------------|
| 1000 | 11 | 17.7 |
| 2000 | 22 | 17.7 |
Order_items
| id | order_id |
|-----|----------|
| 111 | 1000 |
| 112 | 1000 |
| 113 | 2000 |
| 114 | 2000 |
| 115 | 2000 |
结果
| id | order_id | delivery_charges |
|------|----------|------------------|
| 111 | 1000 | 17.7 |
| 112 | 1000 | 17.7 |
| 113 | 2000 | 17.7 |
| 114 | 2000 | 17.7 |
| 115 | 2000 | 17.7 |
期望的结果
| id | order_id | delivery_charges |
|-----|----------|------------------|
| 111 | 1000 | 17.7 |
| 112 | 1000 | |
| 113 | 2000 | 17.7 |
| 114 | 2000 | |
| 115 | 2000 | |
我已经对两个表执行了内部连接,这些表将 Orders 表中的 id 与 order_items 表的 order_id 连接起来。
正如您在结果表中看到的那样。
但我想要的是结果不应该包含重复的运费。
它应该只包含 order_items 表中每个 id 的单个交付费用值,或者我们可以说结果中对于相同的 order_ids 应该只有一个 delivery_charge 值。
请帮我解决一下这个。
解决方案
假设我理解这个问题,您可以在没有窗口函数或变量的情况下执行此操作:
select oi.*,
(case when oi.id = oim.first_id then o.delivery_charge end) as delivery_charge
from orders o join
order_items oi
on o.id = oi.order_id join
(select oi2.order_id, min(oi2.id) as first_id
from order_items oi2
group by oi2.order_id
) oim
on oim.order_id = oi.order_id;
这也可以表述为:
select oi.*, oim.delivery_charge
from order_items oi join
(select o.id, min(oi2.id) as first_id,
min(o.delivery_charge) as delivery_charge
from order_items oi2 join
orders o
on oi2.order_id = o.id
group by o.id
) oim
on oim.order_id = oi.order_id;
推荐阅读
- here-api - HERE - 集群查看 clusterprovider 中的所有项目
- rust - 有没有办法注释一个在 rust 中采用可选闭包的函数?
- powerbi - 如何在 Power BI 中显示总销售额条形图或任何视觉对象
- ruby-on-rails - rails中的“root to:”和“root”有什么区别?
- python - 具有多个 IF 条件的 While 循环
- javascript - 如果由于使用 ms 或我在某处搞砸了,则在 discord.js idk 中重复文本 | 故障,Discord.js(我使用故障)
- r - 如何使用 dplyr 确定在指定天数内发生的事件数?
- tableau-api - Tableau 赛车条形图与总计
- python - 如何将 Nifi 中的 pandas 数据帧从处理器传递到处理器?
- javascript - Progressive Web App - 获取帖子的请求是两次发布数据