SQL ORDER/GROUP BY语句中的数字是什么意思?

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,

我不完全理解此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,
             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…等将是表顺序中的列名


3

ORDER 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