首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用“over( /equivalent by.)”替换旧版本5.5.60 MariaDB

用“over( /equivalent by.)”替换旧版本5.5.60 MariaDB
EN

Stack Overflow用户
提问于 2020-02-11 20:06:43
回答 1查看 175关注 0票数 0

下面的脚本中是否有重写子句“over(.的分区)”的选项,请为MariaDB的较旧版本5.5.60进行重写?这个脚本对于更新版本好,但是这个子句对于MariaDB5.5.60是不可用的(不是可执行的)

代码语言:javascript
复制
select
    a.year,
    a.company,
    b.dt,
    case 
        when a.year = 2018 
            then sum(b.quantity)
        when a.year = 2020
            then sum(b.quantity) 
                - sum(case when a.year = 2018 then sum(b.quantity) else 0 end) 
                  over(partition by a.company, b.dt)
    end quantity
from taba a
inner join tabb b on b.id = a.id
group by
    a.year,
    a.company,
    b.dt

有人知道这个条款的一些变通之处吗?

我将非常感谢对前面提到的MariaDB版本的脚本进行更正。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-11 21:12:29

由于窗口函数是在MarieDB 10.2.0中引入的,请考虑加入聚合子查询,以等同于条件SUM() OVER()调用。

代码语言:javascript
复制
select
    a.year,
    a.company,
    b.dt,
    case 
        when a.year = 2018 
            then sum(b.quantity)
        when a.year = 2020
            then sum(b.quantity) - sub.calc_qty
    end quantity
from taba a
inner join tabb b on b.id = a.id
inner join 
   (select sub_a.company, sub_b.dt,
           sum(case
                    when sub_a.year = 2018
                    then sub_b.quantity
                    else 0     
               end) as calc_qty
    from taba sub_a
    inner join tabb sub_b on sub_b.id = sub_a.id
    group by sub_a.company, sub_b.dt
   ) sub
 on sub.company = a.company 
 and sub.dt = b.dt

group by
    a.year,
    a.company,
    b.dt
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60176573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档