gpt4 book ai didi

mysql - 复杂连接(Joining Joins)

转载 作者:行者123 更新时间:2023-11-29 02:58:33 32 4
gpt4 key购买 nike

我有 4 个表:booking、address、search_address 和 search_address_log

表:(相关列)

预订:(pickup_address_id, dropoff_address_id)

地址:(address_id,邮政编码)

search_address: (address_id, postcode)

search_address_log: (id, from_id, to_id)


我需要做的是从 booking 和 search_address_log 中获得一个计数按接送和从/到邮政编码分组。

我可以为每个单独执行此操作,即:

预订:

SELECT
a1.postcode b_From,
a2.postcode b_to,
COUNT(*) b_count
FROM booking b
INNER JOIN address a1 ON b.pickup_address_id = a1.address_id
INNER JOIN address a2 ON b.destination_address_id = a2.address_id
GROUP BY b_From, b_To
ORDER BY COUNT(*) DESC
LIMIT 10

搜索地址日志:

SELECT
sa1.postcode s_From,
sa2.postcode s_To,
COUNT(*) s_count
FROM search_address_log sal
INNER JOIN search_address sa1 ON sal.from_id=sa1.address_id
INNER JOIN search_address sa2 ON sal.to_id=sa2.address_id
GROUP BY s_From, s_To
ORDER BY COUNT(*) DESC
LIMIT 10

返回表如下:

|    b_To   b_From    b_count   ||     s_To   s_From    s_count   |
| x y 10 || x y 50 |
| a b 5 || a b 60 |

我需要什么:

|    To    From    b_count   s_count   |
| x y 10 50 |
| a b 5 60 |

谢谢,

乔治

最佳答案

从技术上讲,您需要的是全外连接,但 MySQL 不支持。然而,下面应该做你想做的——获取两列的每个 fromto 值的摘要:

SELECT b_from, b_to, sum(b_count) as b_count, sum(s_count) as s_count
FROM ((SELECT a1.postcode as b_From, a2.postcode as b_to, COUNT(*) as b_count, 0 as s_count
FROM booking b INNER JOIN
address a1
ON b.pickup_address_id = a1.address_id INNER JOIN
address a2
ON b.destination_address_id = a2.address_id
GROUP BY b_From, b_To
) UNION ALL
(SELECT sa1.postcode as s_From, sa2.postcode as s_To, 0, COUNT(*) as s_count
FROM search_address_log sal INNER JOIN
search_address sa1
ON sal.from_id = sa1.address_id INNER JOIN
search_address sa2
ON sal.to_id = sa2.address_id
GROUP BY b_From, b_To
)
) ft
GROUP BY s_From, s_to;

关于mysql - 复杂连接(Joining Joins),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27432050/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com