Сбор данных из трех отдельных таблиц, sql - PullRequest
0 голосов
/ 29 июня 2018

У меня есть три отдельные таблицы, которые представляют посещаемость студентов в течение трех недель, соответственно. Я хочу создать четыре колонки, которые разбивают посещаемость по неделям для каждого из студентов. Если ученик присутствовал несколько раз в неделю, следует добавить количество присутствующих. Кроме того, если студент присутствовал в течение одной недели, а не в следующую, он получал бы 1 за текущий месяц (при условии, что он присутствовал только один раз) и 0 за одну отсутствующую. Я пытался несколько вариантов count () и объединений, но безрезультатно. Любая помощь будет принята с благодарностью. Ниже приводится усеченная скрипка:

http://www.sqlfiddle.com/#!9/b847a

Вот пример того, чего я пытаюсь достичь:

Name | CurrWeek | LastWeek | TwoWkAgo

Paula | 0 | 2 | 3

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Вместо трех таблиц у вас должна быть только одна таблица со столбцом на неделю. Поэтому, естественно, одно решение для вашего запроса - создать его на лету с UNION ALL:

select
  name,
  sum(week = 'currentWeek') as currentWeek,
  sum(week = 'lastWeek') as lastWeek,
  sum(week = 'thirdWeek') as thirdWeek
from
(
  select 'currentWeek' as week, name from currentWeek
  union all
  select 'lastWeek' as week, name from lastWeek
  union all
  select 'thirdWeek' as week, name from thirdWeek
) all_weeks
group by name
order by name;

(Если вы хотите вместо этого объединить три таблицы, вам потребуются полные внешние объединения, которые MySQL не поддерживает, если я правильно помню. В любом случае, мой совет - изменить модель данных.)

0 голосов
/ 29 июня 2018

Вы можете попробовать этот запрос:

select currweek.name, currweek.att, lastweek.att, twoWkAgo.att from 
(select name, count(attendance) as att from currentWeekTable group by name) currweek,
(select name, count(attendance) as att from lastWeekTable group by name) lastweek,
(select name, count(attendance) as att from twoWeekTable group by name) twoWkAgo
where twoWkAgo.name=currWeek.name and twoWkAgo.name=lastweek.name;

Предполагается, что ваши 3 таблицы посещаемости содержат имя в качестве общего поля.

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