首页 > 解决方案 > 如何列出SQL中多列中值出现的次数?

问题描述

我有一个 SQL 广告约定表:

| id  | ad1    | ad2   | ad3    |
| ----|--------| ------| -------|
| 1   |val_1   |NULL   | NULL   |
| 2   |val_2   |val_1  | NULL   |
| 3   |val_3   |NULL   | val_3  |

我想在ad1, ad2, ad3列中列出所有广告值的出现时间。查询将返回

| value   | times |
| --------| ------|
| val_1   | 2     |
| val_2   | 1     |
| val_3   | 2     |

执行此操作的最佳方法是什么(以获得最佳性能)?

标签: sqlpostgresql

解决方案


UNION ALL在子查询中使用

select t.value, count(*)
from (
   select ad1 value from ad_convention
   union all
   select ad2 value from ad_convention
   union all
   select ad3 value from ad_convention
) t
group by t.value

推荐阅读