SQL ORDER/GROUP BY语句中的数字是什么意思?
我不完全理解此SQL子查询,对此有一些疑问: Group By和Order By关键字(即Group By 1,2,3或Order By 1,2)后面的数字的用途是什么 子查询:SQL ORDER/GROUP BY语句中的数字是什么意思?,sql,Sql,我不完全理解此SQL子查询,对此有一些疑问: Group By和Order By关键字(即Group By 1,2,3或Order By 1,2)后面的数字的用途是什么 子查询: SELECT a.dep_month, a.dep_day_of_week, AVG(a.flight_distance) AS average_distance FROM ( SELECT dep_month, dep_day_of_week,
SELECT a.dep_month,
a.dep_day_of_week,
AVG(a.flight_distance) AS average_distance
FROM (
SELECT dep_month,
dep_day_of_week,
dep_date,
SUM(distance) AS flight_distance
FROM flights
GROUP BY 1,2,3
) a
GROUP BY 1,2
ORDER BY 1,2;
提前感谢:好吧,按1排序,2表示选择中的按第一和第二字段排序,所以
等于
SELECT a.dep_month,
a.dep_day_of_week,
...
ORDER BY a.dep_month, a.dep_day_of_week;
如果字段中有一个长而复杂的表达式,则语法可能会很方便:
SELECT bla-bla-bla-...-bla-bla,
...
ORDER BY 1 -- No Copy + Paste of "bla-bla-bla-...-bla-bla"
但是,更好的方法是放置别名
好的,ORDER BY 1,2表示选择中的ORDER BY 1和ORDER BY 2字段,所以
等于
SELECT a.dep_month,
a.dep_day_of_week,
...
ORDER BY a.dep_month, a.dep_day_of_week;
如果字段中有一个长而复杂的表达式,则语法可能会很方便:
SELECT bla-bla-bla-...-bla-bla,
...
ORDER BY 1 -- No Copy + Paste of "bla-bla-bla-...-bla-bla"
但是,更好的方法是放置别名
SQL标准提供了按order by和group by的基于1的位置而不是表达式引用列的方法 根据您的示例,这两个查询是相同的:
SELECT dep_month,
dep_day_of_week,
dep_date,
SUM(distance) AS flight_distance
FROM flights
GROUP BY 1, 2, 3
SELECT dep_month,
dep_day_of_week,
dep_date,
SUM(distance) AS flight_distance
FROM flights
GROUP BY dep_month, dep_day_of_week, dep_date
另一方面,应该注意的是,整个GROUPBY子句是多余的,因为它是确定性的;给定select列,group by子句只列出所有非聚合列,因此不添加任何编程值。SQL标准提供了按order by和group by的1基位置引用列,而不是它们的表达式 根据您的示例,这两个查询是相同的:
SELECT dep_month,
dep_day_of_week,
dep_date,
SUM(distance) AS flight_distance
FROM flights
GROUP BY 1, 2, 3
SELECT dep_month,
dep_day_of_week,
dep_date,
SUM(distance) AS flight_distance
FROM flights
GROUP BY dep_month, dep_day_of_week, dep_date
另一方面,应该注意的是,整个GROUPBY子句是多余的,因为它是确定性的;给定select列,group by子句只列出所有非聚合列,因此不添加任何编程值。group by和ORDER by后面的数字就是列
在下面的查询中:
选择dep_月,
每周的副工作日,
副署长日期,
SUMdistance作为飞行距离
从航班
按1,2分组
1是dep_月
2是一周中的第二天
3是dep_日期吗
但如果您正在从表中选择*;然后1,2,3…等将是表顺序中的列名
3分组依据和排序依据之后的数字是列
在下面的查询中:
选择dep_月,
每周的副工作日,
副署长日期,
SUMdistance作为飞行距离
从航班
按1,2分组
1是dep_月
2是一周中的第二天
3是dep_日期吗
但如果您正在从表中选择*;然后1,2,3…等将是表顺序中的列名
3ORDER BY 1,2表示在select中按第一个和第二个文件排序,即按a.dep_月、a.dep_日、a.dep_月、a.dep_日、a.dep_月、a.dep_月、a.dep_日、a.dep_月、a.dep_月、a.dep_月、a.dep_月、a.dep_月、a。。。SQL-92,即不要使用它。按顺序分组-我不知道它是否曾经是ANSI SQL的一部分。ORDER BY 1,2表示在select中按第一和第二个文件排序,即按a.dep_月、a.dep_日、of_weekI认为答案应该提到,这种语法似乎越来越不受欢迎:ORDER BY Orderinal position自1992年以来一直不受欢迎。。。SQL-92,即不要使用它。按顺序分组-我不知道它是否曾经是ANSI SQL的一部分。你是说旧的SQL标准@下划线\u d AFAIK所有数据库都支持按子句分组/排序的位置引用,我知道数据库不支持。按顺序分组的位置无论如何不在ANSI SQL-92中。SQL-89呢?SQL-92中的ORDER BY Orderinal position是不推荐使用的。你是说旧的SQL标准@下划线\u d AFAIK所有数据库都支持按子句分组/排序的位置引用,我知道数据库不支持。按顺序分组的位置无论如何不在ANSI SQL-92中。SQL-89呢?SQL-92中的ORDER BY ordinal position是不推荐使用的;添加一个CTE创建一个别名列似乎总是一个更好的方法。@下划线\u d:当面对像Interbase 4.0这样的旧RDBMS时,通常是很遗憾的!唯一的方法…嗯,也就是说,在select中创建的别名可以按顺序使用,对吗?因此,中间CTE似乎没有必要。编辑:刚刚注意到你的编辑:是的,我从来没有真正考虑过在复杂表达式的情况下使用序数;添加一个CTE创建一个别名列似乎总是一个更好的方法。@下划线\u d:当面对像Interbase 4.0这样的旧RDBMS时,通常是很遗憾的!唯一的方法…嗯,也就是说,在select中创建的别名可以按顺序使用,对吗?因此,中间CTE似乎没有必要。编辑:刚刚注意到你的编辑:P