当我们在SQL查询中使用“group by 1”时它意味着什么

时间:2014-03-20 15:59:45

标签: mysql sql

我遇到了一个由

指定的查询
select concat(21*floor(diff/21), '-', 21*floor(diff/21) + 20) as `range`,     count(*) as 
`number of users` from new_table group by 1 order by diff;

这里group by 1究竟是什么意思?

2 个答案:

答案 0 :(得分:3)

假设你有一个选择:

SELECT name FROM employee GROUP BY 1;

无论如何,它总是按照select中给出的第一列进行分组。 在这种情况下,列名称'分组。

因此,如果我们将上述陈述替换为:

SELECT department FROM employee GROUP BY 1;

我们现在对部门进行分组,而无需更改' 1'在小组中。

编辑:(按照斯图尔特的要求)

如果我们在表格中有以下数据' employe':

-- name --
Walt
Walt
Brian
Barney

一个简单的选择将传递上面的所有行,而'组则传递1'会产生一个Walt-row:

以group by:

输出
-- name --
Walt
Brian
Barney

答案 1 :(得分:0)

+1 @FabianBigler首先回答,但我会补充一下:

http://dev.mysql.com/doc/refman/5.6/en/select.html说:

  

可以使用列名,列别名或列位置在ORDER BY和GROUP BY子句中引用为输出选择的列。列位置是整数,以1开头。

对于它的价值,这是非标准的SQL,所以不要指望它适用于其他品牌的SQL数据库。