mysql - 是否可以在 MySQL 中按多列(OR 语句)分组?
问题描述
我想按 2 列分组,但在“或模式”中......我想我会用一个例子更好地解释自己:
ID | Col 1 | Col 2 | Col 3 | Rest of columns ...
-------------------------------------------------------
1 A Q green
2 B R blue
3 B S red
4 C T purple
5 D U orange
6 E R black
7 F U brown
8 F V pink
9 G W white
所以...按第 1 列分组,我们将第 2+3 行和第 7+8 行合并到结果中 按第 2 列分组,我们将第 2+6 行和第 7+5 行合并到结果中
但我想在它们之间进行分组,因此 SQL 结果(在这种情况下)输出为 2 行:
- 组中的第 2、3 和 6 行
- 其他组中的第 5、7 和 8 行
- 在其他独特的行中
这可能在一个独特的 SQL 中吗?还是在编程代码中处理这些数据“合并”更好?
因此,选择第 3 列的 concat 的结果可能是:
blue,red,black
brown,pink,orange
(and then the rest that are "unique" of the two groupings...)
green
purple
white
所以它就像一个“按组”,但考虑到 2 列:-P 这很难解释,但我希望视觉示例自己说话。
顺便说一句:我在 MySQL 8 中......无论是哪一个,如果我必须升级或更改,我可以做到;-)
解决方案
对于此示例数据,您可以使用自联接:
SELECT t1.col1,
GROUP_CONCAT(t2.col3) col3
FROM tablename t1 INNER JOIN tablename t2
ON t2.id = t1.id OR t2.col2 = t1.col2
GROUP BY t1.col1
HAVING COUNT(DISTINCT t1.id) > 1 OR COUNT(t2.id) = 1
请参阅演示。
结果:
col1 | col3 |
---|---|
一个 | 绿色 |
乙 | 蓝色,红色,黑色 |
C | 紫色的 |
F | 橙色,棕色,粉红色 |
G | 白色的 |
我想这是您预期结果中的错字。
推荐阅读
- db2 - 如何在不使用week关键字的情况下在db2 select查询中按7天分组数据
- java - SPOJ Prime Generator,获得 TLE,但尽我所能接近。(JAVA)
- html - 为特定类型的每个元素添加动态属性
- ckeditor - CKEditor ShowProtected 移动车把代码
- amazon-sagemaker - 是否有任何关于如何使用自定义算法以分布式方式执行训练的 SageMaker 资源?
- python - 如何使用python脚本重命名文件夹中的多个文件
- java - 在 IntelliJ 中运行 JUnit 测试,在 Maven 多模块 Spring 项目上
- celery - 气流调度程序抛出错误 - “DisabledBackend”对象没有属性“_get_task_meta_for”
- python - 如何在 Python 中用数组迭代地填充列表?
- javascript - NodeJS:Typescript 从包装器中导出 expressjs