You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL统计多列distinct值并按指定格式输出的实现方法

PostgreSQL实现方案

首先将原表的col1、col2、col3进行行转列处理,再通过条件聚合统计各取值的出现次数即可,假设原始表名为your_table,具体SQL如下:

SELECT
  date,
  col,
  COUNT(*) FILTER (WHERE val = 'a') AS a,
  COUNT(*) FILTER (WHERE val = 'b') AS b,
  COUNT(*) FILTER (WHERE val = 'c') AS c,
  COUNT(*) FILTER (WHERE val = 'd') AS d
FROM (
  -- 并行展开列名数组和列值数组,实现列转行
  SELECT
    date,
    UNNEST(ARRAY['col1', 'col2', 'col3']) AS col,
    UNNEST(ARRAY[col1, col2, col3]) AS val
  FROM your_table
) t
GROUP BY date, col
ORDER BY date DESC, col;

如果使用的PostgreSQL版本不支持FILTER语法,可以用CASE WHEN替代实现相同逻辑:

SELECT
  date,
  col,
  SUM(CASE WHEN val = 'a' THEN 1 ELSE 0 END) AS a,
  SUM(CASE WHEN val = 'b' THEN 1 ELSE 0 END) AS b,
  SUM(CASE WHEN val = 'c' THEN 1 ELSE 0 END) AS c,
  SUM(CASE WHEN val = 'd' THEN 1 ELSE 0 END) AS d
FROM (
  SELECT
    date,
    UNNEST(ARRAY['col1', 'col2', 'col3']) AS col,
    UNNEST(ARRAY[col1, col2, col3]) AS val
  FROM your_table
) t
GROUP BY date, col
ORDER BY date DESC, col;

内容的提问来源于stack exchange,提问作者hm 5

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 18:06:05