我正在尝试显示商家及其最高折扣优惠。但我还是想展示没有offer的商家。
业务存储在business_tb
business_id | business_name
------------+---------------
1 | aaa
2 | bbb
3 | ccc
这些企业提供的折扣存储在 deal_offer_tb
deal_offer_id | business_id | deal_id
--------------+-------------+----------
1 | 1 | 3
2 | 1 | 2
3 | 2 | 0
4 | 1 | 1
5 | 3 | 3
折扣类型存储在deal_tb
中。
deal_id | discount
--------+----------
1 | 40%
2 | 30%
3 | 20%
4 | 10%
所以我想要的显示应该是这样的:
1 | aaa | 40%
2 | bbb | ---
3 | ccc | 20%
但是对于我当前的查询:
SELECT a.business_id, a.business_name, c.discount
FROM business_tb a
LEFT JOIN (SELECT min(deal_id) AS deal_id, business_id FROM deal_offer_tb GROUP BY business_id) b ON a.business_id = b.business_id
LEFT JOIN deal_tb c ON b.deal_id = c.deal_id
我只得到:
1 | aaa | 40%
3 | ccc | 20%
它不显示没有提供折扣的商家。
我应该如何获得我想要的输出?
更新:我不知道之前发生了什么,但我的查询正在按照我想要的方式运行。感谢那些回答的人的努力。欣赏它,伟大的时光!
最佳答案
我会通过使用子查询来找到每个企业的最大折扣来解决这个问题,加入 deal_offer_tb
和 deal_tb
表。然后,将这个子查询加入到business_tb
表中,得到最终的结果。请注意,我使用初始 LEFT JOIN
来说明给定企业甚至可能没有与之关联的交易。在那种情况下,我为该企业指定了 0 的最大折扣(这是有道理的,因为从那时起将适用完整的正常价格)。
SELECT
t1.business_id,
t1.business_name,
COALESECE(t2.max_discount, 0) AS max_discount
FROM business_tb t1
LEFT JOIN
(
SELECT t1.business_id, MAX(t2.discount) AS max_discount
FROM deal_offer_tb t1
INNER JOIN deal_tb t2
ON t1.deal_id = t2.deal_id
GROUP BY t1.business_id
) t2
ON t1.business_id = t2.business_id
关于php - 显示最高报价,但仍然显示没有报价,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43795353/