如何使用扩展分组功能获取此查询

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 个不同查询的组合。为什么不运行四个单独的查询?或者将四个的结果与UNIONs 结合起来? 它只是我需要的输出,所以我不知道他们为什么要这样 但是他们是说“写一条 SQL 语句给出这个结果”还是他们说“查询数据库给出这个结果”?有一个重要的区别。 我相信它通过一个单一的 sql 语句。您下面的查询语句实际上非常接近,它看起来像是答案的镜像,除了来自正确输出的第一行值不同 我会玩它让你知道 【参考方案1】:

使用UNIONs 完成:

  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”...产生分组结果...如何获取汇总数据?

如何通过 LINQ 扩展获取 group 的分组值列表

Symfony Query Builder 如何获取最后分组的记录

如何使用聚合函数在 MySQL 查询中获取分组记录的第一条和最后一条记录?