我们可以在SQL中按条件分组合并两列吗?
我想知道我们是否可能有如下情况:我们可以在SQL中按条件分组合并两列吗?,sql,Sql,我想知道我们是否可能有如下情况: SELECT Variable1, Variable2, ... FROM MyDB.MyTable GROUP BY ( CONCATENATE ( Variable1 AND Variable2 ) ) 要获得如下结果: Variable1, Variable2, Variable1 and Variable2 只需按Variable1、Variable2进行分组,即可得到所需的结果,但需要选择要合并的列。因此,这将起作用: SELECT Va
SELECT Variable1, Variable2, ...
FROM MyDB.MyTable
GROUP BY ( CONCATENATE ( Variable1 AND Variable2 ) )
要获得如下结果:
Variable1, Variable2, Variable1 and Variable2
只需按
Variable1、Variable2
进行分组,即可得到所需的结果,但需要选择要合并的列。因此,这将起作用:
SELECT Variable1, Variable2, concat(Variable1 , Variable2), AggregatedColumn
FROM MyDB.MyTable
GROUP BY Variable1, Variable2
……假设Variable1
和Variable2
当然是列名
一般规则是,除了那些包含在group by
中的聚合函数中之外,您需要拥有每个组件的最小构建块。所以
SELECT concat(Variable1 , Variable2), AggregatedColumn
FROM MyDB.MyTable
GROUP BY concat(Variable1 , Variable2)
…也可以工作,因为您只需要将连接的值作为输出中的非聚合列,但是
SELECT Variable1, Variable2, concat(Variable1 , Variable2), AggregatedColumn
FROM MyDB.MyTable
GROUP BY concat(Variable1 , Variable2)
不会,因为它期望组中的Variable1
和Variable2
另一方面,您也可以使用Variable1+Variable2
而不是concat(Variable1,Variable2)
编辑:根据@jarlh下面的评论,groupbyconcat(Variable1,Variable2)
不是有效的ANSI-SQL,不应该使用它,我也明白了原因。如果Varaible1
和Variable2
是ash
和win
的话,它会把它分为同一组,就像它们是as
和hwin
或ashwi
和n
一样,尽管它们很可能是不同的组。这是什么意思?您的要求是什么?在ANSI SQL中,不,这是不允许的。但是,如果没有聚合函数,GROUPBY就毫无意义。显示一些示例表数据和预期结果。groupbyconcat(Variable1,Variable2)
实际上是无效的ANSI SQL。GROUP BY子句可能只列出列。我建议的答案是GROUP BY Variable1,Variable2
,另一个选项只是另一种可能性。通过一个或多个列的投影进行分组适用于大多数主要的DBMS。当您说“GROUP BY子句可能只列出列”时,您指的是什么文档?ISO/IEC 9075-2:2011(E),即ISO/ANSI SQL规范。(符合ANSI SQL的诀窍是在派生表中执行concat部分,然后根据其结果进行分组。)@jarlh,我可以理解这可能导致问题的原因,并编辑了我的答案以反映这一点。