sql - 在 sqlite 中可以进行此查询吗?
问题描述
我有一张这样的桌子:
ID A B C
0 x x
1 x
2 x x
3 x
我想通过查询来获得这个(如果可能的话,SQLite 语法)
A 3
B 2
C 1
我一直在使用 CASE WHEN 子句,像这样
WITH solutions AS (SELECT
CASE
WHEN `B` = 'x' THEN 'A'
WHEN `B` = 'x' THEN 'B'
WHEN `C` = 'x' THEN 'C'
END AS 'Solution'
FROM use_cases)
SELECT solution, COUNT(*) AS 'Count'
FROM solutions
GROUP BY Solution ORDER BY COUNT(*) DESC
但如果一行存在多于一列带有“x”的行,它将不起作用,因为 WHEN 评估将在找到第一种情况时停止。
解决方案
使用union all
:
select col, count(*)
from (select 'A' as col from t where A = 'x' union all
select 'B' from t where B = 'x' union all
select 'C' from t where C = 'x'
) x
group by col
order by count(*) desc;
推荐阅读
- unity3d - 如何在 Unity 中使用 Vuforia 图像目标记录跟踪位置
- ethereum - “argument[] calldata”类型编码在solidity中
- javascript - 全新的反应和困惑我如何从函数中省略一个项目并将一个按钮注入我的网格
- bitbucket-pipelines - 将 Bitbucket 管道工件上传到共享点
- android - 从 DetailFragment 按下返回箭头按钮返回 ThumbnailFragment 后,暴露的下拉菜单的 AutoCompleteTextView 选项消失
- rstudio - 有没有办法恢复被覆盖的旧版本的 .Rnw 文件?
- android - 如何在可组合的屏幕中使用协同程序?
- ios - 存档成功后看不到任何存档或组织
- javascript - 如何以与表单中的问题相同的顺序访问 Google 表单密钥对值
- javascript - 在 socket.io 的上下文中,响应 101 是什么意思?