sql - 如果条件匹配,则计算行中的列
问题描述
CREATE TABLE table
a character varying(255),
b character varying(255),
c character varying(255),
d character varying(255)
);
column | value
-------+------
a | "Correct"
b | "Correct"
c | "Incorrect"
d | "Something Else"
-------+------
correct| 2
如何将“正确”计算为同一行中符合包含字符串“正确”标准的其他列的计数?
解决方案
一种方法是蛮力:
select t.*,
( (a = 'Correct')::int + (b = 'Correct')::int +
(c = 'Correct')::int + (d = 'Correct')::int
) as num_correct
from t;
一个更有趣的方法是使用横向连接:
select t.*, v.num_correct
from t left join lateral
(select count(*) as num_correct
from (values (a), (b), (c), (d)) v(x)
where x = 'Correct'
) v
on 1=1;
推荐阅读
- mysql - 为什么我不能使用外键名称删除外键,而是接受类似works_with_ibfk_2类型名称的东西?
- python - 如何在彼此的顶部绘制相同列的行
- dialogflow-es - 如何在 Dialogflow 中创建 Facebook 轮播作为“自定义有效负载”
- nginx - 文件意外结束,期待“;” 或 nginxconfig.io 中的“}”
- node.js - Mongoose 查找,具有一个搜索参数的多个字段
- bioinformatics - 如何从 v. 0.11.6 开始为 fastQC 启用 kmer 图
- xml - 是否可以覆盖 apache-servicemix cxf.xml 文件?
- javascript - handlebar.js 中的条件 IF
- powershell - 如果是第 7 天和第 14 天,Send-MailMessage
- apache-spark - Databricks 中的 Z 排序