1

レコードのすべてのタイプの組み合わせのカウントを返すPostgresqlクエリが必要です。

たとえば、列A、B、C、D、E、および重要ではない他の列を持つテーブルTがあります。

タブレット
--------------
A | B | C | D | E

クエリは、列A、B、C、Dの値と、指定されたE値で各構成が発生した回数のカウントを含むテーブルRを返す必要があります。

表R
---------------
A | B | 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

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 に答える
0

私はそれを理解しました、それは本当に愚かなものでした。カウントを比較するときに、select count(*)でwhere'E'='ABC'句を指定するのを忘れました。とにかくあなたの助けてくれてありがとう!

于 2012-08-07T13:28:34.263 に答える