Как найти столбцовое значение, которое имеет определенное значение - PullRequest
0 голосов
/ 19 октября 2018

У меня есть таблица attendance

+-----------------------------------------------+
+ p_id  | day_1 | day_2 | day_3 | day_4 | day_5 |
+-----------------------------------------------+
+  1    | P     |  P    | P     | A     | A     |
+  2    | P     |  A    | A     | P     | P     |
+  3    | A     |  A    | P     | P     | P     |
+-----------------------------------------------+

Здесь p_id = people.id внешний ключ

И таблица people

+------------+
+ id   | gend|
+------------+
| 1    | M   |
| 2    | F   |
| 3    | M   |
+------------+

Я хотел бы получить окончательный вывод, как этот, который содержит общее количество отсутствующих с их соответствующим количеством мужчин / женщин:

+---------------------------------------+
+  day     | total_a | males  | females +
+---------------------------------------+
+  day_1   |  1      | 1      | 0       +
+  day_2   |  2      | 1      | 1       +
+  day_3   |  1      | 0      | 1       +

и т. Д.

Я не могу думать, с чего начатьс таким запросом.Любая помощь приветствуется.

1 Ответ

0 голосов
/ 19 октября 2018

Звучит так, как будто вам нужно отключить таблицу attendance, затем join и сгруппировать:

select a.day, sum(a.pa = 'P') as total,
       sum(a.pa = 'P' and p.gend = 'M') as num_males,
       sum(a.pa = 'P' and p.gend = 'F') as num_females
from ((select p_id, day_1 as pa, 'day_1' as day
       from attendance a
      ) union all
      (select p_id, day_2, 'day_2' as day
       from attendance a
      ) union all
      (select p_id, day_3, 'day_3' as day
       from attendance a
      ) union all
      (select p_id, day_4, 'day_4' as day
       from attendance a
      ) union all
      (select p_id, day_5, 'day_5' as day
       from attendance a
      )
     ) a join 
     people p
     on p.id = a.p_id
group by day
order by day;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...