Сумма трех столбцов, которая заполняется с помощью оператора case в sql - PullRequest
0 голосов
/ 10 января 2019

Мне нужно получить сумму devicePoint, osPoint, browserPoint, которая заполняется с помощью оператора case внутри select в sql. Вот мой код

SELECT *,
    CASE
        WHEN device='Default' THEN 1
        ELSE 5
    END AS devicePoint,
    CASE
        WHEN operating_system='Default' THEN 1
        ELSE 3
    END AS osPoint,
    CASE
        WHEN browser='Default' THEN 1
        ELSE 2
    END AS browserPoint,
    (devicePoint + osPoint + browserPoint) as 'Total'
FROM mytable
WHERE 
 (
    (device = 'Desktop' AND operating_system='Ios' AND browser='Firefox')
    OR
    (device = 'Desktop' AND operating_system='Ios' AND browser='Default')
    OR 
    (device = 'Desktop' AND operating_system='Default' AND browser='Firefox')
    OR 
    (device = 'Desktop' AND operating_system='Default' AND browser='Default')
    OR 
    (device = 'Default' AND operating_system='Ios' AND browser='Default')
    OR 
    (device = 'Default' AND operating_system='Default' AND browser='Firefox')
    OR 
    (device = 'Default' AND operating_system='Default' AND browser='Default')
)

Ответы [ 3 ]

0 голосов
/ 10 января 2019

Я даю ответ, потому что вы можете упростить предложение where, потому что MySQL поддерживает кортежи. Логика будет выглядеть так:

select t.*,
       (devicePoint + osPoint + browserPoint) as 'Total'
from (select (case when device = 'Default' then 1 else 5 end) as devicePoint,
             (case when operating_system = 'Default' then 1 else 3 end) as osPoint,
             (case when browser = 'Default' then 1 else 2 end) as browserPoint        
      from mytable t
      where (device, operating_system, browser) in
                ( ('Desktop', 'Ios', 'Firefox'),
                  ('Desktop', 'Ios', 'Default'),
                  . . .
                )
     ) t;
0 голосов
/ 10 января 2019

Вот самое простое предложение ГДЕ для вас.

SELECT *,
    CASE
        WHEN device='Default' THEN 1
        ELSE 5
    END AS devicePoint,
    CASE
        WHEN operating_system='Default' THEN 1
        ELSE 3
    END AS osPoint,
    CASE
        WHEN browser='Default' THEN 1
        ELSE 2
    END AS browserPoint,
    (devicePoint + osPoint + browserPoint) as 'Total'
FROM mytable
WHERE 
 (device IN ('Desktop','Default') AND operating_system IN ('Ios','Default') AND browser IN ('Firefox','Default'))
0 голосов
/ 10 января 2019

Использовать подзапрос:

SELECT
    devicePoint,
    osPoint,
    browserPoint,
    (devicePoint + osPoint + browserPoint) AS Total
FROM
(
    SELECT *,
        CASE WHEN device = 'Default' THEN 1 ELSE 5 END AS devicePoint,
        CASE WHEN operating_system = 'Default' THEN 1 ELSE 3 END AS osPoint,
        CASE WHEN browser = 'Default' THEN 1 ELSE 2 END AS browserPoint
    FROM mytable
    WHERE 
        (device = 'Desktop' AND operating_system='Ios' AND browser='Firefox') OR
        (device = 'Desktop' AND operating_system='Ios' AND browser='Default') OR
        (device = 'Desktop' AND operating_system='Default' AND browser='Firefox') OR
        (device = 'Desktop' AND operating_system='Default' AND browser='Default') OR
        (device = 'Default' AND operating_system='Ios' AND browser='Default') OR
        (device = 'Default' AND operating_system='Default' AND browser='Firefox') OR
        (device = 'Default' AND operating_system='Default' AND browser='Default')
) t;

Невозможно сослаться на ваши три псевдонима в том же SELECT, в котором они были определены. Но они доступны, если вы используете подход подзапроса выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...