栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

带有内部选择子句的sql order by和按汇总分组

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

带有内部选择子句的sql order by和按汇总分组

你可以做这样的事情。我没有您的输入数据,所以我

SCOTT.EMP
改用了。

注意几件事。我按分组

JOB
,并
GROUPING(JOB)
在中使用
SELECt
TOTAL
为摘要行添加标签)和中
ORDERBY
。由于我
JOB
SELECT
(输出列)中重用了列名,因此在
ORDERBY
I中,我必须小心限定列名
JOB
(为了清楚起见,我指的是输入表列,而不是指-中的列,
SELECT
如果中的列名
ORDERBY
不合格)。然后,需要对中的列名进行限定
ORDERBY
,这迫使我在该
FROM
子句中对该表进行别名化(否则,我将不得不在所有地方都携带完整的表名)。

如果可以的话,

GROUPING
在中
SELECt
(而不是
NVL
)中使用函数特别重要。您不希望为工作组添加标签-
您只希望为汇总行添加标签。这一点甚至使很多非常高级的程序员感到困惑。
JOB``null``null``TOTAL

我展示了如何“手动”确定顺序:

PRESIDENT
首先是,然后是
MANAGER
,然后是所有其他作业(按字母顺序排列)。如果您将优先级顺序保存在某个地方(例如,在表中),则可以加入该表并使用排序列而不是
CASE
查询中的“手动”表达式。

select case grouping(job) when 0 then job else 'TOTAL' end as job     , sum(sal) as total_salaryfrom   scott.emp egroup  by rollup(job)order  by grouping(e.job)       -- to get the total in the last row        , case e.job when 'PRESIDENT' then 1 when 'MANAGER' then 2 end        , e.job;JOB       TOTAL_SALARY--------- ------------PRESIDENT         5000MANAGER8275ANALYST6000CLERK  4150SALESMAN          5600TOTAL 29025


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/414723.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号