【问题标题】:postgres count distinct values from multiple columnpostgres 计算来自多列的不同值
【发布时间】:2021-12-11 19:41:38
【问题描述】:

我正在尝试显示 3 列中的所有不同值及其数量。

我的桌子:

date |  col1  |  col2  | col3
-------------------------------
26...|  a     |  a     | b
25...| c      |  d     |  a
...

所有 3 列都有值 a、b、c、d。

我想要这样的东西:

date   |  col  |  a  | b   |  c  |   d 
--------------------------------------
26.....| col1  |  1  |  0  |  0  |  0
26.....| col2  |  1  |  0  |  0  |  0
26.....| col3  |  0  |  1  |  0  |  0
25.....| col1  |  0  |  0  |  1  |  0
25.....| col2  |  0  |  0  |  0  |  1

有办法吗?

【问题讨论】:

    标签: sql postgresql count multiple-columns


    【解决方案1】:

    欢迎来到 SO。假设可能的值是固定的(abcd),另一种方法是在 CTE 中为每一列和日期创建一行,并在外部查询中使用FILTER,例如

    WITH j (date,col) AS (
      SELECT date, unnest(array[col1,col2,col3])
      FROM mytable
    )
    SELECT j.date, 'col'||j.col, 
     count(*) FILTER (WHERE col ='a'), 
     count(*) FILTER (WHERE col ='b'),
     count(*) FILTER (WHERE col ='c'),
     count(*) FILTER (WHERE col ='d') 
    FROM j
    JOIN mytable t ON t.date = j.date
    GROUP BY j.date,j.col
    ORDER BY j.date,j.col;
    

    演示:db<>fiddle

    【讨论】:

    • 不完全是。列名 col1、col2、col3 应在列 col 的第二个表中看到。
    • @hm5 我明白了。所以我相信你需要为此编写一个动态查询。你能分享你到目前为止所尝试的吗?也许通过您的一些意见,我们可以加快速度-
    • 我尝试了一些更简单的方法,但我只能数一个值。此外,它不包括女巫值的计数是:SELECT * FROM ( date, COUNT() FILTER( WHERE col1 = 'a'), COUNT() FILTER(WHERE col2 = 'a' ), COUNT(*) FILTER(WHERE col3 = 'a') FROM mytable GROUP BY date) FROM mytable
    • 表格然后显示列日期、列 col1、列 col2 和列 col3
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 2014-01-15
    相关资源
    最近更新 更多