我遇到过这个"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中.这是我第一次尝试编写这样的函数 - 但是,这不太正确,因为我想返回指定列的多行 - …