SQL计数分组

时间:2015-03-30 22:47:03

标签: sql confluence

我有一个来自数据库的表。它非常简单:它有一个PK,我们称之为WS_NUM,第二个值可以有重复的称为DEPT。

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

但是,我希望得到可能看起来像

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

让它由伯爵分组,所以你会得到类似的东西:

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

这是否可能我知道我可以使用LINQ和一些额外的C#很容易做到这一点但这是一个Confluence SQL查询所以我真的受限于我可以做的。

1 个答案:

答案 0 :(得分: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,这就是为什么知道你要查询的内容很重要。