完全相同的查询失败或“成功”使用不同的别名 [英] Same exactly Query Fails or "Succeeds" with different Aliases used

查看:122
本文介绍了完全相同的查询失败或“成功”使用不同的别名的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下面两个版本的查询完全一样: b
$ b


版本1(在内部SELECT中使用k作为别名):



$ pre $ SELECT $ k $ [$年],w_vol,
ROW_NUMBER()OVER(ORDER BY k DESC) AS rank1,
ROW_NUMBER()OVER(ORDER BY w_vol DESC)AS rank2
FROM(
SELECT w_vol,c_date AS k FROM
(SELECT 1590 AS c_date,1 AS w_vol) ,
(SELECT 1599 AS c_date,1 AS w_vol),
(SELECT 1602 AS c_date,1 AS w_vol),
(SELECT 1609 AS c_date,2 AS w_vol),
(SELECT 1610 AS c_date,1 AS w_vol),

ORDER BY 1



< blockquote>

版本2(在内部SELECT中使用l作为别名):



  SELECT l as [year],w_vol,
ROW_NUMBER()OVER(ORDER BY l DESC)AS rank1,
ROW_NUMBER()OVER(ORDER BY w_vol DESC)AS rank2
FROM (
SELECT w_vol,c_date AS l FROM
(SELECT 1590 AS c_date,1 AS w_vol),
(SELECT 1599 AS c_date,1 AS w_vol),
(SELECT 1602 AS c_date,1 AS w_vol),
(SELECT 1609 AS c_date,2 AS w_vol),
(SELECT 1610 AS c_date,1 AS w_vol),

ORDER BY 1

输出我总是得到两个查询(注意不使用缓存结果





无论使用什么别名,我的预期结果都是一样的 - 它只是别名!


问题:为什么我一直无法获得版本1和版本2的成功 p>


解决方案

这是一个相当有趣的错误,但好消息是它在BigQuery标准中得到修复SQL。有关如何尝试的详细信息,请查看 https://cloud.google。 com / bigquery / sql-reference / enable-standard-sql

Below two versions of the same exactly query

Version 1 (uses k as alias in inner SELECT):

SELECT k as [year], w_vol, 
  ROW_NUMBER() OVER (ORDER BY k DESC) AS rank1,
  ROW_NUMBER() OVER (ORDER BY w_vol DESC) AS rank2
FROM (
  SELECT w_vol, c_date AS k FROM 
    (SELECT 1590 AS c_date, 1 AS w_vol),
    (SELECT 1599 AS c_date, 1 AS w_vol),
    (SELECT 1602 AS c_date, 1 AS w_vol),
    (SELECT 1609 AS c_date, 2 AS w_vol),
    (SELECT 1610 AS c_date, 1 AS w_vol),
)
ORDER BY 1

Version 2 (uses l as alias in inner SELECT):

SELECT l as [year], w_vol, 
  ROW_NUMBER() OVER (ORDER BY l DESC) AS rank1,
  ROW_NUMBER() OVER (ORDER BY w_vol DESC) AS rank2
FROM (
  SELECT w_vol, c_date AS l FROM 
    (SELECT 1590 AS c_date, 1 AS w_vol),
    (SELECT 1599 AS c_date, 1 AS w_vol),
    (SELECT 1602 AS c_date, 1 AS w_vol),
    (SELECT 1609 AS c_date, 2 AS w_vol),
    (SELECT 1610 AS c_date, 1 AS w_vol),
)
ORDER BY 1 

Below is output i am consistently getting for both queries (note No Cached Results is used)

I expected result be the same no matter what alias is used - it is just alias at all!

Question: Why I am consistently getting failure for Version 1 and "success" for Version 2?

解决方案

This is a rather interesting bug, but the good news are that it is fixed in BigQuery's standard SQL. For details how to try it out - check https://cloud.google.com/bigquery/sql-reference/enabling-standard-sql

这篇关于完全相同的查询失败或“成功”使用不同的别名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆