Как посчитать значения в столбце и сохранить имя каждого столбца с их результатом в строке? - PullRequest
0 голосов
/ 12 мая 2019

Я делал базу данных для какого-то частного сайта.В моей базе данных есть таблица с именами, где я могу сохранить имена пользователей и времена, когда пользователь свободен.Таблица выглядит следующим образом.

|uid |Monday|Tuesday |... |Saturday |Sunday |t12|t13|t14|...|t19|t20
_____________________________________________________________________

uid - это имя пользователя, а t12-t20 - часы ( t16 = 1 , понедельник = 1 будет означать, что пользователь свободен в понедельник в 16).

Пример одногострока будет:

|alex1|1|1|0|0|0|0|1|0|0|0|0|0|1|1|1|1|

Это будет означать, что пользователь alex1 свободен в понедельник, вторник и воскресенье в 17, 18, 19 и 20 часов.

У меня может быть несколько пользователей в таблице и несколько раз для некоторых пользователей.Мол, пользователь alex1 может находиться в нескольких строках с разным сохраненным временем.( Пример : одна строка означает, что он свободен в понедельник и пятницу после 15, но в какой-то другой строке он свободен в субботу в 14, в 17 и в 20)

Пример :

gordon | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
gordon | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 

Первая строка будет означать: пользователь gordon свободен в 12 часов в понедельник, а вторник, вторая строка означает: пользователь gordon свободен в 13 часов в среду

Вопрос:

Как мне сделать запрос, который проходит через таблицу и дает мне результат:

  Day    | t12 | t13 | t14 | t15 | t16 | t17 | t18 | t19 | t20 |
________________________________________________________________
Monday      5     4     8     8     8     4     0     0     4
Tuesday     2     2     2     2     2     1     0     0     2
Wednesday   10    10    10    2     8     10    8     7     7
Thursday    5     4     8     8     8     4     0     1     4
Friday      5     4     3     7     8     4     9     0     4
Saturday    8     9     8     3     9     4     3     0     4
Sunday      1     4     8     8     1     4     0     9     3

Это будет означать: в понедельник в 14 часовЕсть 8 пользователей, которые являются бесплатными, или в пятницу в 20 лет есть 4 пользователей, которые являются свободными.

Ответы [ 2 ]

1 голос
/ 12 мая 2019

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

availability

user day time
   1   1   16

Возможно, это не лучшее решение, но оно значительно улучшило ваши текущие настройки.

0 голосов
/ 12 мая 2019

Вы можете рассчитать дневные результаты, а затем использовать объединение все, как показано ниже -

SELECT 'Monday' AS Day,
SUM(t12) t12,SUM(t13) t13,SUM(t14) t14,SUM(t15) t15,SUM(t16) t16,
SUM(t17) t17,SUM(t18) t18,SUM(t19) t19,SUM(t20) t20
FROM your_table WHERE Monday = 1

UNION ALL

SELECT 'Tuesday' AS Day,
SUM(t12) t12,SUM(t13) t13,SUM(t14) t14,SUM(t15) t15,SUM(t16) t16,
SUM(t17) t17,SUM(t18) t18,SUM(t19) t19,SUM(t20) t20
FROM your_table WHERE Tuesday = 1

UNION ALL

SELECT 'Wednesday' AS Day,
SUM(t12) t12,SUM(t13) t13,SUM(t14) t14,SUM(t15) t15,SUM(t16) t16,
SUM(t17) t17,SUM(t18) t18,SUM(t19) t19,SUM(t20) t20
FROM your_table WHERE Wednesday = 1

UNION ALL

SELECT 'Thursday' AS Day,
SUM(t12) t12,SUM(t13) t13,SUM(t14) t14,SUM(t15) t15,SUM(t16) t16,
SUM(t17) t17,SUM(t18) t18,SUM(t19) t19,SUM(t20) t20
FROM your_table WHERE Thursday = 1

UNION ALL

SELECT 'Friday' AS Day,
SUM(t12) t12,SUM(t13) t13,SUM(t14) t14,SUM(t15) t15,SUM(t16) t16,
SUM(t17) t17,SUM(t18) t18,SUM(t19) t19,SUM(t20) t20
FROM your_table WHERE Friday = 1

UNION ALL

SELECT 'Saturday' AS Day,
SUM(t12) t12,SUM(t13) t13,SUM(t14) t14,SUM(t15) t15,SUM(t16) t16,
SUM(t17) t17,SUM(t18) t18,SUM(t19) t19,SUM(t20) t20
FROM your_table WHERE Saturday = 1

UNION ALL

SELECT 'Sunday' AS Day,
SUM(t12) t12,SUM(t13) t13,SUM(t14) t14,SUM(t15) t15,SUM(t16) t16,
SUM(t17) t17,SUM(t18) t18,SUM(t19) t19,SUM(t20) t20
FROM your_table WHERE Sunday = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...