как сравнивать столбцы и считать в таблице - PullRequest
0 голосов
/ 28 декабря 2018

Я использую MySQL.мне нужно сравнить столбцы в таблице

Я использую MySQL 8.0 и только одну базу данных

create table A
(
   serial_no           varchar(10),
   p01_pass_fail       varchar(4),
   p02_pass_fail       varchar(4),
   p03_pass_fail       varchar(4),
   p04_pass_fail       varchar(4),
   p05_pass_fail       varchar(4)
)

, если строка:

serial_no = 001,
p01_pass_fail = pass,
p02_pass_fail = fail,
p03_pass_fail = pass,
p04_pass_fail = pass,
p05_pass_fail = fail

Мой идеальный результат - проходcount = 3, fail count = 2

мне нелегко

Ответы [ 3 ]

0 голосов
/ 28 декабря 2018

Я предлагаю изменить дизайн вашей таблицы следующим образом:

CREATE TABLE A (
    serial_no varchar(10),
    p01_pass_fail tinyint,
    p02_pass_fail tinyint,
    p03_pass_fail tinyint,
    p04_pass_fail tinyint,
    p05_pass_fail tinyint
)

Затем сохраните 0 для сбоя и 1 для пропуска.Это значительно упрощает запрос:

SELECT
    serial_no,
    cnt AS pass,
    5 - cnt AS fail
FROM
(
    SELECT,
        serial_no,
        p01_pass_fail + p02_pass_fail + p03_pass_fail + p04_pass_fail + p05_pass_fail AS cnt
    FROM yourTable
) t

Метки pass и fail действительно представляют собой элементы представления и не относятся к вашей модели данных.Если вы хотите преобразовать целое число 0/1 в метку, вы все равно можете сделать это с помощью выражения CASE, например

CASE WHEN p01_pass_fail = 1 THEN 'pass' ELSE 'fail' END
0 голосов
/ 28 декабря 2018

Другим подходом для этого будет создание логических выражений, таких как p01_pass_fail = "pass", а затем суммирование логических результатов этих выражений:

SELECT
    serial_no,
    ((p01_pass_fail = 'pass') +
     (p02_pass_fail = 'pass') +
     (p03_pass_fail = 'pass') +
     (p04_pass_fail = 'pass') +
     (p05_pass_fail = 'pass')) AS pass_count,
    ((p01_pass_fail = 'fail') +
     (p02_pass_fail = 'fail') +
     (p03_pass_fail = 'fail') +
     (p04_pass_fail = 'fail') +
     (p05_pass_fail = 'fail')) AS fail_count
FROM
    A

Вы также можете проверить следующий пример с данными: DB-Fiddle

0 голосов
/ 28 декабря 2018

Вы можете использовать CASE ... END для «перевода» 'pass' или 'fail' в 1 или 0 и + для суммирования.

SELECT serial_no,
       CASE p01_pass_fail
         WHEN 'fail' THEN
           0
         WHEN 'pass' THEN
           1
       END
       +
       ...
       +
       CASE p05_pass_fail
         WHEN 'fail' THEN
           0
         WHEN 'pass' THEN
           1
       END pass_count,
       CASE p01_pass_fail
         WHEN 'pass' THEN
           0
         WHEN 'fail' THEN
           1
       END
       +
       ...
       +
       CASE p05_pass_fail
         WHEN 'pass' THEN
           0
         WHEN 'fail' THEN
           1
       END fail_count
       FROM a;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...