sql - 如果条件匹配,则计算行中的列

标签 sql postgresql

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;

关于sql - 如果条件匹配,则计算行中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55821285/

相关文章:

postgresql - Windows 上使用 Visual Studio 的 OpenCobol 和 PostgreSQL

mysql - 数据库性能调整有哪些资源?

php - 从 mysql 表中选择 id 和 count(id)

java - 如何在 Digital Ocean 上的同一个 Droplet 中使用 postgresql 和 spring boot 应用程序

c# - 在 OleDbCommand 中使用 “... where Column like ...” 不起作用

mysql - Perl - 将日期从 YEAR-MM-DD 转换为 MONTH、DD、YEAR

sql - 如何查询在 postgres 中以字符串形式存在的数组?

带双引号的 postgresql COPY 和 CSV 数据

mysql - MySQL 中查询的逆结果

mysql - 当列更改时选择一行