【问题标题】:sql query to break down count of every combinationsql查询分解每个组合的计数
【发布时间】:2012-08-06 21:32:47
【问题描述】:

我需要一个 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(*) ,或者我只是完全以错误的方式去做。我真的很感激任何关于我应该如何去做的建议。谢谢大家。

【问题讨论】:

  • 也许你被 NULL 愚弄了?请给我们看一些数据。
  • 我同意@wildplasser - 您向我们展示的内容应该可以正常工作。所以问题出在你没有向我们展示的东西上。

标签: postgresql group-by


【解决方案1】:

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

这里肯定还有什么误会。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-07
      • 1970-01-01
      • 1970-01-01
      • 2021-06-11
      • 1970-01-01
      • 2019-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多