mysql group by 对两列的唯一组合

Raj*_*aul 5 mysql sql group-by

我有一张桌子:Employee

columns:
1. id
2. name
3. city1
4. city2
Run Code Online (Sandbox Code Playgroud)

我想要和GROUP BY的组合,例如city1city2

  • 'Bangalore'city1:和 city2:的员工'Chennai'
  • 另一名员工的 city1:'Chennai'和 city2:'Bangalore'

完成后会形成一个组GROUP BY

帮我构建这个sql。

Gor*_*off 3

最简单的方法是使用least()and greatest()

select least(city1, city2) as city1, greatest(city1, city2) as city2, count(*)
from employees
group by least(city1, city2), greatest(city1, city2);
Run Code Online (Sandbox Code Playgroud)

如果你有价值观,逻辑会稍微复杂一些NULL。这个问题没有提到NULL价值观。

笔记:

该答案已编辑为使用:

group by city1, city2
Run Code Online (Sandbox Code Playgroud)

尽管技术上是正确的,但我出于两个原因删除了编辑:

  1. city1city2是不明确的,因为它们都是数据中的列名和列别名。
  2. 并非所有数据库都支持group by子句中的列别名。

第一个是主要原因。如果列别名与表中的名称不同,则可以使用替代公式。否则,我认为代码会很混乱,因此难以维护并且更容易出错。