Как построить таблицу из нескольких независимых операторов выбора?

0

Я изучил некоторые связанные вопросы, но я не мог найти помощь.

Я пытаюсь создать статистическую таблицу, которая показывает количество компаний, завершивших этапы регистрации. Я выполнил всю тяжелую работу, и я могу просто использовать простое утверждение select, чтобы увидеть, сколько выполнено, скажем, шаг 1. Но я хотел написать оператор select, который будет содержать step 1 step 2 step 3 (columns) with number (values) компаний, завершивших каждый шаг.

step table 

----------------------------------------------------
progress_id | label | level | score | is_completed | 
----------------------------------------------------

progress_id: Компания, которую мы отслеживаем

метка: метка уровня шага, например: электронная почта компании была подтверждена,

уровень: скажи первый шаг,

оценка: например: 20%,

is_completed: true/false

Вы видите, с этим я могу просто сделать:

select count(*) step_one_count from step where level = 1 and is_completed = true;

----------------
step_one_count |
----------------
20

select count(*) step_two_count from step where level = 2 and is_completed = true;

----------------
step_two_count |
----------------
10

Затем мне нужно написать одно предложение выбора, будь то с подзапросом или что-то еще, чтобы получить этот результат ниже

----------------------------------------------------
step_one_count | step_two_count | step_three_count |
----------------------------------------------------
20               10               40
  • 0
    Отметьте единственную СУБД, которую вы на самом деле используете.
  • 0
    Кажется, ваш step_three_count будет 30
Показать ещё 6 комментариев
Теги:
plpgsql

2 ответа

1
Лучший ответ

Я подозреваю, что вы хотите условное агрегирование, в MySQL вы можете сделать:

SELECT SUM( (level = 1 and is_completed = true) ) AS step_one_count,
       SUM( (level = 2 and is_completed = true) ) AS step_two_count,
       SUM( (level = 3 and is_completed = true) ) AS step_three_count
FROM step s;

Стандартно вы можете использовать CASE Expression вместо:

SELECT SUM(CASE WHEN level = 1 and is_completed = true THEN 1 ELSE 0 ) AS step_one_count,
       . . . 
FROM step s;

РЕДАКТИРОВАТЬ: Как вы пометили DBMS вы можете использовать FILTER:

SELECT COUNT(*) FILTER (WHERE level = 1 and is_completed = true) AS step_one_count,
       COUNT(*) FILTER (WHERE level = 2 and is_completed = true) AS step_two_count,
       COUNT(*) FILTER (WHERE level = 3 and is_completed = true) AS step_three_count,
FROM step s;
  • 0
    Я не могу сказать, насколько я люблю stackoverflow для всех вас, ребята. Просто работает с редактировать код. большое спасибо
0

случай использования, когда

   select 
   sum(case when level = 1 and is_completed = true then 1 else 0 end) 
   as  step_one_count,
   sum(case when level = 2 and is_completed = true then 1 else 0 end) 
   as step_two_count,
  sum(case when level in (1,2) and is_completed = true then 1 else 0 end)
   as step_three_count        
    from step  
  • 0
    ERROR: function sum(boolean) does not exist LINE 1: select sum(level = 1 and is_completed = true) as step_one_co...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню