【问题标题】:Mysql rank over functionMysql 排名高于函数
【发布时间】:2019-01-08 01:26:01
【问题描述】:

我在 MySQL 工作台中使用以下查询,并且在函数排名附近出现错误。我认为 MySQL 可能不支持支持 Rank() over function。因此,任何人都可以帮助成功运行这个吗?

select STORE_CODE, 'GBP', "SALES WITHOUT VAT", 'UK' from(
select STORE_CODE, "SALES WITHOUT VAT", RANK() OVER(ORDER BY "SALES WITHOUT VAT" DESC) AS RANK 
 from( select store_code, sum("SALES WITHOUT VAT") as "SALES WITHOUT VAT" 
       from( select c_site AS STORE_CODE, case when c_currency = 'GBP' then A_SALES_EXVAT_REAL 
       when c_currency = 'EUR' then round(A_SALES_EXVAT_REAL * ukurs ,3) end as "SALES WITHOUT VAT" 
       from kf_move01.salesticket_line left outer join
       (select ukurs, to_date(99999999-gdatu), year(to_date(99999999-gdatu)) as year, month(to_date(99999999-gdatu)) as month 
       from "KF_MOVE01"."TCURR" 
       where mandt = 201 and kurst = 'M' and tcurr = 'GBP' and fcurr = 'EUR' 
       order by 99999999-gdatu desc) as tcur 
       on tcur.year = year(d_year_month_day) and tcur.month = month(d_year_month_day) 
       where id_opco = 2 and c_comp_code in ('BQ10', 'BQ20','BQ30','BQ40') 
       and d_year_month_day between add_days(now(),-181) and add_days(now(),-1)) 
       group by store_code 
       order by 2 desc ) ) where rank <= 5;

错误代码:1064。您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 '( ORDER BY "SALES WITHOUT VAT" DESC ) FROM (SELECT' at line 6 0.000 sec Java error: SAP DBTech JDBC: [279] (at 179) 附近使用正确的语法): group 函数是嵌套的:line 1 col 180 (at pos 179)

在线sql检查器错误:

您的 SQL 语法有错误;似乎错误就在附近:'( ORDER BY "SALES WITHOUT VAT" DESC ) AS RANK from( ' at line 10

【问题讨论】:

  • MySQL Workbench 只是将您的查询发送到 MySQL,因此它不必支持任何 MySQL 函数并且不会给您 SQL 错误。该错误来自 MySQL 本身。
  • 除非您向我们提供完整的错误信息,否则我们无法为您提供帮助
  • 但它不起作用。它给了我一个语法错误。
  • mysql 中的错误:错误代码:1064。您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 '( ORDER BY "SALES WITHOUT VAT" DESC ) FROM (SELECT' at line 6 0.000 sec Java error: SAP DBTech JDBC: [279] (at 179) 附近使用正确的语法): group 函数是嵌套的: line 1 col 180 (at pos 179) Online sql checker error: You have an error in your SQL syntax;似乎错误在附近:'( ORDER BY "SALES WITHOUT VAT" DESC ) AS RANK from(' 在第 10 行
  • 和来自 mysql :我在 OVER 附近收到语法错误,说缺少右括号

标签: mysql


【解决方案1】:

如果您实际上使用的是 MySQL 8.0,那么这里会发生一些事情。

可以将列别名用双引号括起来,"SALES WITHOUT VAT",但是当从子查询中选择同一列时,不能用双引号引用它。您必须使用反引号,否则 MySQL 会认为您实际上是在选择名为“SALES WITHOUT VAT”的字符串。

为了使排名功能正常工作,请尝试将您的 order by 移动到查询的末尾。

select STORE_CODE, 'GBP', `SALES WITHOUT VAT`, 'UK' from(
select STORE_CODE, `SALES WITHOUT VAT`, RANK() over w AS `RANK`
.
.
.
) window w as (order by `SALES WITHOUT VAT` desc))
where `RANK` <=5;

玩弄这个 SQL fiddle 可能会有所帮助。

https://www.db-fiddle.com/f/28ZF6xdoWsVvH6JTNsFdQo/3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 2023-02-08
    • 2020-08-12
    相关资源
    最近更新 更多