我完全不理解这个SQL子查询,并对此有些怀疑:
子查询:
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;
提前致谢:)
答案 0 :(得分:2)
嗯,ORDER BY 1, 2
表示在选择中按第一和第二个字段排序,所以
SELECT a.dep_month,
a.dep_day_of_week,
...
ORDER BY 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"
然而, 更好的方法是将别名
SELECT bla-bla-bla-...-bla-bla AS MyExpression,
...
ORDER BY MyExpression -- More readable than 1
答案 1 :(得分:1)
SQL标准提供引用.fa-balance-scale {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML =
'');
}
和order by
中的列(基于1的)位置,而不是表达式
从您的示例中提取,这两个查询是相同的:
group by
顺便说一句,应该注意整个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
子句是多余的,因为它是确定性的;给定select列,group by
子句只列出所有非聚合列,因此不会添加任何编程值。
答案 2 :(得分:0)
GROUP BY
和ORDER BY
之后的数字是列。
在以下查询中:
SELECT dep_month, dep_day_of_week, dep_date, SUM(距离)AS flight_distance 从航班起飞 GROUP BY 1,2,
1是dep_month 2是dep_day_of_week 3是dep_date
但是如果你从表中给出SELECT *;那么1,2,3 ......等将是表顺序中的列名。
3