如何使用扩展分组功能获取此查询
Posted
技术标签:
【中文标题】如何使用扩展分组功能获取此查询【英文标题】:How to get this query with the use of extended group by functions 【发布时间】:2014-05-08 03:06:45 【问题描述】:我正在尝试编写一个返回以下内容的查询:
DNAME G TITLE SALARY
---------------------------------------- - ------------ ----------
1059000
Analyst 107000
Manager 395000
Developer 152000
Programmer 152500
Sr. Analyst 252500
F 366500
M 692500
Risk and Compliance 264500
Finance and Accounting Excellence 395000
Internal Audit and Financial Controls 399500
11 rows selected.
更新!!!好的,所以我在玩不同的查询,这是我与上述输出最接近的...看起来它仍然缺少所有工资的总和第一个返回的行...我相信为了使生成的输出以该格式显示是通过使用按多维数据集的分组功能但是我尝试了按分组设置多维数据集的不同组合无济于事...有什么想法???
select dname,gender,title,salary from (select dname,gender,title, grouping_id(dname, gender, title) 作为“group_id”,sum(salary) 作为来自 azdepartment 的薪水 通过分组集合(dname, 性别, 标题) 具有 grouping_id(dname, 性别, 标题)>0);
DNAME G TITLE SALARY
---------------------------------------- - ------------ ----------
Manager 395000
Programmer 152500
Sr. Analyst 252500
Analyst 107000
Developer 152000
Finance and Accounting Excellence 395000
Risk and Compliance 264500
Internal Audit and Financial Controls 399500
M 692500
F 366500
10 rows selected.
【问题讨论】:
SQL 不是报表创建工具,它是数据选择工具。期望的结果作为查询结果并没有真正的意义(不是说不可能实现,而是像用汽车敲核桃一样)——它是 4 个不同查询的组合。为什么不运行四个单独的查询?或者将四个的结果与UNION
s 结合起来?
它只是我需要的输出,所以我不知道他们为什么要这样
但是他们是说“写一条 SQL 语句给出这个结果”还是他们说“查询数据库给出这个结果”?有一个重要的区别。
我相信它通过一个单一的 sql 语句。您下面的查询语句实际上非常接近,它看起来像是答案的镜像,除了来自正确输出的第一行值不同
我会玩它让你知道
【参考方案1】:
使用UNION
s 完成:
select '' as dname, '' as gender, '' as title, sum(salary) as salary
from azconsultant
union
select '' as dname, '' as gender, title, sum(salary) as salary
from azconsultant
group by title
union
select '' as dname, gender, '' as title, sum(salary) as salary
from azconsultant
group by gender
union
select dname, '' as gender, '' as title, sum(salary) as salary
from azdepartment
join azconsultant on azdepartment.did=azconsultant.did
group by dname
order by 1 DESC, 2 DESC , 3 DESC;
更新添加了 ORDER BY,添加了测试和小提琴:http://sqlfiddle.com/#!4/3fa8b/4
【讨论】:
您的语句与我的数据一起运行以上是关于如何使用扩展分组功能获取此查询的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 SQL Server 在此查询中按天对结果进行分组?
选择“case when”...产生分组结果...如何获取汇总数据?