我有一张这样的桌子:
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)
返回的结果是一列还是两列都没有关系。
提前致谢
使用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)