2015-03-30 90 views
0

我有一个来自数据库的表。这很简单:它有一个PK,我们称之为WS_NUM,第二个值可以有重复名为DEPT。通过计数进行SQL分组

我想得到所有WS_NUM对应每个DEPT(我可以做)的计数。

但是,后来我想,以充分利用其结果可能类似于

------------- 
| 1 | This | 
| 1 | That | 
| 2 | His | 
| 2 | Hers | 
| 7 | Mine | 
| 7 | Yours | 
| 7 | OURS | 
------------- 

而且由Count有它组,这样你会得到这样的:

----------- 
| 1 | This | 
| | That | 
----------- 
----------- 
| 2 | His | 
| | Hers | 
----------- 
----------- 
| | Mine | 
| 7 | Yours | 
| | OURS | 
----------- 

这是甚至可能我知道我可以很容易地用LINQ和一些额外的C#来做到这一点,但这是一个Confluence SQL查询,所以我受限于我能做的事情。

+0

这个数据库会执行什么样的风格?例如Postgres,MySQL – xathien 2015-03-30 22:52:44

+1

目视合并连续数字是一个显示层作业,不应在SQL中完成。它应该在UI层完成。 – 2015-03-30 22:52:50

+0

@xathien - 很确定它是SQL(后端到轨道系统) – TofuBug 2015-03-31 10:49:34

回答

0

不知道究竟哪种SQL DB支持Confluence,我无法给出确切的答案,但我可以给出一个总体思路。

,看起来像

SELECT COUNT(WS_NUM) as WS_COUNT, DEPT FROM WOSSNAME GROUP BY DEPT 

您可以执行查询作为将聚集各部门到一个列子查询的初始查询。使用GROUP_CONCAT一个MySQL例如:

SELECT WS_COUNT, GROUP_CONCAT(DEPT SEPARATOR ',') FROM (SELECT COUNT(WS_NUM) as WS_COUNT, DEPT FROM WOSSNAME GROUP BY DEPT) as subselect GROUP BY WS_COUNT; 

或者使用array_agg一个Postgres例如:

SELECT WS_COUNT, array_agg(DEPT) FROM (SELECT COUNT(WS_NUM) as WS_COUNT, DEPT FROM WOSSNAME GROUP BY DEPT) as subselect GROUP BY WS_COUNT; 

两个array_aggGROUP_CONCAT分别是特定于的Postgres和MySQL,这就是为什么知道这一点很重要,你'重新查询。