使用MySQL可以GROUP BY多列吗?

Rhy*_*ght 173 mysql sql group-by

GROUP BYMySQL SELECT查询中是否可以有多个列?例如:

GROUP BY fV.tier_id AND 'f.form_template_id'
Run Code Online (Sandbox Code Playgroud)

小智 89

是的,您可以按多列进行分组.例如,

SELECT * FROM table
GROUP BY col1, col2
Run Code Online (Sandbox Code Playgroud)

结果首先按col1分组,然后按col2分组.在MySQL中,列首选项从左到右.

  • 从左到右的偏好应用于分组的升序而不是列组偏好.`GROUP BY`适用于`col1 + col2`.例如`col1 = 1,2,1,2 | col2 = 1,2,3,2`并且运行`GROUP BY col1,col2`将返回`1,1 | 1,3 | 2,2`而不是建议的'1,1 | 2,2`.而`GROUP BY col2,col1`将改变col2返回的升序.`1,1 | 2,2 | 1,3`演示:http://sqlfiddle.com/#!9/d5f69/1请注意,在两种情况下都返回行id:2,尽管反转了列. (4认同)

小智 17

是的,但更多两列的分组是什么意思?嗯,它与每行每个唯一对的分组相同.列出列的顺序会更改行的排序方式.

在你的例子中,你会写

GROUP BY fV.tier_id, f.form_template_id

同时,代码

GROUP BY f.form_template_id, fV.tier_id

会给出类似的结果,但排序方式不同.


Tre*_*vor 15

group by fV.tier_id, f.form_template_id
Run Code Online (Sandbox Code Playgroud)


Dan*_*lad 11

举一个简单的例子,我有一个计数器,该计数器需要汇总站点上每个访问页面的唯一IP地址。基本上是按页面名称然后按IP分组。我用DISTINCT和GROUP BY的组合解决了它。

SELECT pagename, COUNT(DISTINCT ipaddress) AS visit_count FROM log_visitors GROUP BY pagename ORDER BY visit_count DESC;
Run Code Online (Sandbox Code Playgroud)

  • 这个答案值得注意,因为它解决的问题与其他答案有所不同。 (2认同)

小智 10

如果你更喜欢(我需要应用这个)同时按两列分组,我刚刚看到了这一点:

SELECT CONCAT (col1, '_', col2) AS Group1 ... GROUP BY Group1
Run Code Online (Sandbox Code Playgroud)

  • 请参阅拉达回答下的 ypercube 评论。考虑作为替代方案:`SELECT CONCAT(col1, '_', col2) FROM GROUP BY col1, col2`。结果通常与此答案*看起来*相同,但内部执行却大不相同。 (2认同)