相关疑难解决方法(0)

有人可以解释这个SQL吗?(以及我如何'参数化'并作为函数调用?)

我遇到过这个"voodoo"SQL,它用于从表中执行自定义数据分组.我想知道它是如何做到的,但是我无法理解它.一位SQL专家可以用简单的英语向那些不太熟悉SQL的人解释这个片段的各个部分,它可以让它发挥其魔力吗?

select ceil(rnk/10.0) as grp,
       col1, col2, col3, col4, col5, col6, col7
from (select e.col1, e.col2, e.col3, e.col4, e.col5, e.col6, e.col7,
             (select count(*) 
              from mytable d
              where e.col1 > d.col1)+1 as rnk
      from mytable e) x
order by grp;
Run Code Online (Sandbox Code Playgroud)

上面我无法理解的SQL部分是返回列'x'的内部SQL:

(select count(*) from mytable d
                where e.col1 > d.col1)+1 as rnk
                from mytable e
                ) x
Run Code Online (Sandbox Code Playgroud)

我希望能够自己运行该查询:

select count(*) from mytable d
                where e.col1 > d.col1)+1 as rnk
                from mytable e
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时,我收到错误:

错误:语法错误在"+"处或附近第2行:其中e.col1> d.col1)+1为rnk

那么,那里发生了什么?!

此外,当前的SQL使用数字10进行硬编码.我想在其周围包装一个函数,以便能够使用10以外的数字调用该函数.

后端数据库是PostgreSQL,因此该函数将在PL/pgSQL中.这是我第一次尝试编写这样的函数 - 但是,这不太正确,因为我想返回指定列的多行 - …

sql postgresql plpgsql

1
推荐指数
1
解决办法
458
查看次数

标签 统计

plpgsql ×1

postgresql ×1

sql ×1