MySQL如何计算包含指定列值的列

时间:2018-05-22 05:54:20

标签: mysql

我有表xyz

ID    day1    day2    day3    day4
1     A         A       P       P
2     A         A       A       P
3     A         A       A       A
4     A         P       P       P

我希望能够查询并返回ID,其中包含A作为该行值的列数。所以结果看起来像这样:

ID    Count
 1     2
 2     3
 3     4
 4     1

2 个答案:

答案 0 :(得分:3)

这是一个涉及字符串连接的技巧:

SELECT
    ID,
    CHAR_LENGTH(CONCAT(day1, day2, day3, day4)) -
    CHAR_LENGTH(REPLACE(CONCAT(day1, day2, day3, day4), 'A', '')) AS Count
FROM yourTable
ORDER BY ID;

enter image description here

Demo

如果你想计算其他字母,只需复制我对字母A的逻辑,例如对于L,我们可以尝试:

CHAR_LENGTH(CONCAT(day1, day2, day3, day4)) -
CHAR_LENGTH(REPLACE(CONCAT(day1, day2, day3, day4), 'L', ''))

答案 1 :(得分:2)

case应用于所有列并使用它们很简单!请尝试以下:

select id,
       case day1 when 'A' then 1 else 0 end +
       case day2 when 'A' then 1 else 0 end +
       case day3 when 'A' then 1 else 0 end +
       case day4 when 'A' then 1 else 0 end `CountA`,
       case day1 when 'L' then 1 else 0 end +
       case day2 when 'L' then 1 else 0 end +
       case day3 when 'L' then 1 else 0 end +
       case day4 when 'L' then 1 else 0 end `CountL`,
       case day1 when 'P' then 1 else 0 end +
       case day2 when 'P' then 1 else 0 end +
       case day3 when 'P' then 1 else 0 end +
       case day4 when 'P' then 1 else 0 end `CountP`
from Tbl