SQL行聚合(Row Aggregation)实现往返城市总车费合并统计的查询方法咨询
SQL行聚合(Row Aggregation)实现往返城市总车费合并统计的查询方法咨询
嗨,看起来你需要把往返的城市对合并起来统计总车费对吧?我来给你几个实用的解决方案,你可以根据自己使用的数据库来选择:
通用方案(适配所有SQL数据库)
这个方法不依赖特定数据库的函数,用CASE WHEN来统一城市对的格式,不管往返方向如何,都会被归为同一组:
SELECT CASE WHEN Source < Dest THEN CONCAT(Source, '/', Dest) ELSE CONCAT(Dest, '/', Source) END AS City, SUM(Fare) AS Total_Fare FROM your_table_name GROUP BY CASE WHEN Source < Dest THEN CONCAT(Source, '/', Dest) ELSE CONCAT(Dest, '/', Source) END;
原理很简单:通过判断两个城市的字典序,把较小的城市放在前面、较大的放在后面拼接成统一的城市对,再按这个拼接后的字段分组求和,就能得到往返路线的总车费了。
特定数据库简化方案
如果你的数据库支持特定函数,代码可以更简洁:
- PostgreSQL / MySQL 8.0+:可以用
LEAST和GREATEST函数直接获取字典序的最小/最大值:SELECT CONCAT(LEAST(Source, Dest), '/', GREATEST(Source, Dest)) AS City, SUM(Fare) AS Total_Fare FROM your_table_name GROUP BY LEAST(Source, Dest), GREATEST(Source, Dest); - SQL Server:可以用
IIF函数替代CASE WHEN简化代码:SELECT CONCAT(IIF(Source < Dest, Source, Dest), '/', IIF(Source < Dest, Dest, Source)) AS City, SUM(Fare) AS Total_Fare FROM your_table_name GROUP BY IIF(Source < Dest, Source, Dest), IIF(Source < Dest, Dest, Source);
注意:记得把代码里的your_table_name替换成你实际使用的表名哦!
备注:内容来源于stack exchange,提问作者Harry Deol
相关产品推荐
相关产品推荐

