MySQL查找最繁忙的两条装运线,源端口和目标端口可切换
这张桌子的结构很简单MySQL查找最繁忙的两条装运线,源端口和目标端口可切换,mysql,Mysql,这张桌子的结构很简单 create table t_hr_ship (shipment_id int, shipper_id int, source_port varchar(20), destination_port varchar(20)); 问题是:找到前3条最繁忙的线路并打印这些最繁忙线路的两个端口。对于两个装运,一个是从A到B,另一个是从B到A,它们在同一条线上(在相同的两个目的地之间),所以它们的装运应该加在一起 我正在考虑创建一个新的列“l
create table t_hr_ship
(shipment_id int,
shipper_id int,
source_port varchar(20),
destination_port varchar(20));
问题是:找到前3条最繁忙的线路并打印这些最繁忙线路的两个端口。对于两个装运,一个是从A到B,另一个是从B到A,它们在同一条线上(在相同的两个目的地之间),所以它们的装运应该加在一起
我正在考虑创建一个新的列“line”,将源端口和目标端口连接起来,但不知道如何使交换的源端口和目标端口是同一行。如果端口的ID不是按升序排列的,则可以使用
CASE
切换端口。然后按一对排序的帖子分组,按count(*)
降序对结果排序,并使用LIMIT
仅获取前3名
SELECT CASE
WHEN s.source_port < s.destination_port
s.source_port
ELSE
s.destination_port
END a,
CASE
WHEN s.source_port < s.destination_port
s.destination_port
ELSE
s.source_port
END b
FROM t_hr_ship s
GROUP BY CASE
WHEN s.source_port < s.destination_port
s.source_port
ELSE
s.destination_port
END,
CASE
WHEN s.source_port < s.destination_port
s.destination_port
ELSE
s.source_port
END
ORDER BY count(*) DESC
LIMIT 3;
选择案例
当s.source\u port
请参阅:另外,指定您的MySQL版本也会很有帮助,因为答案会因您是否拥有较新的版本(支持CTE等内容)而有所不同。