sql - 如何列出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 |
执行此操作的最佳方法是什么(以获得最佳性能)?
解决方案
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
推荐阅读
- android - android 是否有 Sceneform 应用程序的即时预览?
- datetime - COUNTIF 不起作用,因为列是超链接
- ios - 在视图中适合包含更多堆栈视图的堆栈视图
- python - 我必须使用 strip 或 split 函数从 xpath 中删除数据中的一些文本
- mysql - mysql concat 数字和字符字段
- jszip - JSZip 错误:文件路径的 Ajax 错误:404 Not Found
- javascript - 在html文件中编写脚本的正确方法
- sql-server - 在 SSMS 中执行简单的 SQL 更新查询需要 50 分钟
- amazon-web-services - API-Gateway 集成请求 HTTP 标头未将查询字符串映射到标头
- jquery - 为什么选择元素中没有填充 json 数据?