1

我需要一个 Postgresql 查询,它返回每种类型的记录组合的计数。

例如,我有一个表 T,其中包含 A、B、C、D、E 列和其他不重要的列:

药片
--------------
一个 | 乙| C | D | 乙

查询应返回一个表 R,其中包含 A、B、C、D 列的值,以及每个配置在指定 E 值下发生的次数。

表 R
---------------
一个 | 乙| C | D | 数数

当每条记录的所有计数加在一起时,它应该等于原始表中的记录总数。

这似乎是一个非常简单的问题,但由于我缺乏 SQL 知识,我无法弄清楚如何做到这一点。

我能想到的唯一解决方案是:

select a, b, c, d, count(*)
  from T
  where e = 'abc'
  group by a, b, c, d

但是当从这个查询中添加计数时,它比原始表的计数要多。似乎不应该使用 count(*) ,或者我只是完全以错误的方式去做。我真的很感激任何关于我应该如何去做的建议。谢谢你们。

4

2 回答 2

0

我想通了,这真的很愚蠢。比较计数时,我忘记在 select count(*) 中指定 where 'E' = 'ABC' 子句。无论如何,谢谢你们的帮助!

于 2012-08-07T13:28:34.263 回答
0

NULL价值观不可能骗过你。考虑这个演示:

WITH t(a,b,c,d) AS (
    VALUES
     (1,2,3,4)
    ,(1,2,3,NULL)
    ,(2,2,3,NULL)
    ,(2,2,3,NULL)
    ,(2,2,3,4)
    ,(2,NULL,NULL,NULL)
    ,(NULL,NULL,NULL,NULL)
    )
SELECT a, b, c, d, count(*)
FROM   t
GROUP  BY a, b, c, d
ORDER  BY a, b, c, d;

 a | b | c | d | count
---+---+---+---+-------
 1 | 2 | 3 | 4 |     1
 1 | 2 | 3 |   |     1
 2 | 2 | 3 | 4 |     1
 2 | 2 | 3 |   |     2
 2 |   |   |   |     1
   |   |   |   |     1

这里一定有其他的误解。

于 2012-08-06T22:01:34.350 回答