如何在SQL中计算不同的列而忽略列顺序

Mar*_*arc 2 mysql sql count

我有一张这样的桌子:


home_city     away_city
-----------------------

Valencia      Madrid        
Barcelona     Madrid
Madrid        Valencia
Alicante      Castellon
Madrid        Valencia
Castellon     Alicante
Valencia      Madrid
Run Code Online (Sandbox Code Playgroud)

我想对每种不同组合的行进行计数,但忽略它是home_city还是away_city 我的意思是,通常我会这样查询

SELECT home_city, away_city, COUNT(*) as count_cities
FROM my_table
GROUP BY home_city, away_city

Run Code Online (Sandbox Code Playgroud)

它将返回以下结果:

home_city     away_city     count_cities
----------------------------------------

Valencia      Madrid        2
Barcelona     Madrid        1        
Madrid        Valencia      2
Alicante      Castellon     1
Castellon     Alicante      1
Run Code Online (Sandbox Code Playgroud)

但是我真正想要的是查询忽略该列并返回类似以下内容:

home_city     away_city     count_cities
----------------------------------------

Valencia      Madrid        4
Barcelona     Madrid        1        
Alicante      Castellon     2
Run Code Online (Sandbox Code Playgroud)

返回的结果是一列还是两列都没有关系。

提前致谢

Gor*_*off 5

使用least()greatest()

SELECT LEAST(home_city, away_city) as city1,
       GREATEST(home_city, away_city) as city2,
       COUNT(*) as count_cities
FROM my_table
GROUP BY LEAST(home_city, away_city),
         GREATEST(home_city, away_city);
Run Code Online (Sandbox Code Playgroud)

MySQL在中允许使用别名GROUP BY,因此您可以将其简化为:

SELECT LEAST(home_city, away_city) as city1,
       GREATEST(home_city, away_city) as city2,
       COUNT(*) as count_cities
FROM my_table
GROUP BY city1, city2;
Run Code Online (Sandbox Code Playgroud)