SQL,如何根据字段值对行进行分组
SQL, how to group rows based on field values
我对查询结果组有疑问。图像是一个例子。这是电缆清单。每根电缆都有两个属性,'From' 位置和 'To' 位置。如果我们想按位置对电缆列表进行分组,这就变得棘手了。
当我们按两个位置对数据进行分组时,结果将分为两组。
- 'A->B',
- 'B->A'
但实际上,将这两个组合并为一个更有意义,'From<->',或者说两个位置之间的电缆清单。
考虑再添加一个字段来标记两个位置之间的电缆。但是没有想到什么。
感谢您分享您的想法。
此致,
罗兰
SQL, 组
enter image description here
您可以按 2 列中最小和最大的列进行分组。
使用数据库的函数来执行此操作。
SQL 标准是一个 CASE
表达式,例如:
GROUP BY CASE WHEN A < B THEN A ELSE B END,
CASE WHEN A < B THEN B ELSE A END
或者您可以使用 IF()
或 IIF()
:
这样的函数
GROUP BY IF(A < B, A, B),
IF(A < B, B, A)
或像 LEAST()
和 GREATEST()
这样的函数:
GROUP BY LEAST(A, B),
GREATEST(A, B)
我对查询结果组有疑问。图像是一个例子。这是电缆清单。每根电缆都有两个属性,'From' 位置和 'To' 位置。如果我们想按位置对电缆列表进行分组,这就变得棘手了。
当我们按两个位置对数据进行分组时,结果将分为两组。
- 'A->B',
- 'B->A'
但实际上,将这两个组合并为一个更有意义,'From<->',或者说两个位置之间的电缆清单。
考虑再添加一个字段来标记两个位置之间的电缆。但是没有想到什么。
感谢您分享您的想法。
此致, 罗兰
SQL, 组
enter image description here
您可以按 2 列中最小和最大的列进行分组。
使用数据库的函数来执行此操作。
SQL 标准是一个 CASE
表达式,例如:
GROUP BY CASE WHEN A < B THEN A ELSE B END,
CASE WHEN A < B THEN B ELSE A END
或者您可以使用 IF()
或 IIF()
:
GROUP BY IF(A < B, A, B),
IF(A < B, B, A)
或像 LEAST()
和 GREATEST()
这样的函数:
GROUP BY LEAST(A, B),
GREATEST(A, B)