При отображении группы значений таблицы в mysql каждое значение отображается как «0». - PullRequest
0 голосов
/ 31 марта 2020

моя таблица

mysql> desc attendance;
+--------+------------+------+-----+---------+----------------+
| Field  | Type       | Null | Key | Default | Extra          |
+--------+------------+------+-----+---------+----------------+
| aid    | bigint(20) | NO   | PRI | NULL    | auto_increment |
| sid    | int(10)    | YES  | MUL | NULL    |                |
| cid    | bigint(20) | YES  | MUL | NULL    |                |
| ttid   | bigint(20) | YES  | MUL | NULL    |                |
| did    | int(3)     | YES  | MUL | NULL    |                |
| date   | date       | YES  |     | NULL    |                |
| hour   | varchar(3) | YES  |     | NULL    |                |
| stuid  | bigint(20) | YES  | MUL | NULL    |                |
| status | varchar(8) | YES  |     | NULL    |                |
+--------+------------+------+-----+---------+----------------+
9 rows in set (0.47 sec)

и ее значения

mysql> select * from attendance;
+-----+------+------+------+------+------------+------+-------+---------+
| aid | sid  | cid  | ttid | did  | date       | hour | stuid | status  |
+-----+------+------+------+------+------------+------+-------+---------+
|   1 |    2 |   13 |    4 |    3 | 2020-03-25 | p1   |    16 | present |
|   2 |    2 |   13 |    4 |    3 | 2020-03-25 | p1   |    17 | absent  |
|   3 |    2 |   13 |    4 |    3 | 2020-03-25 | p1   |    18 | present |
|   4 |    2 |   13 |    4 |    3 | 2020-03-25 | p1   |    19 | absent  |
|   5 |    2 |   13 |    4 |    3 | 2020-03-25 | p1   |    20 | present |
|   6 |    2 |   13 |    4 |    3 | 2020-03-25 | p1   |    15 | absent  |
|   7 |    2 |   13 |    2 |    2 | 2020-03-17 | p6   |    16 | present |
|   8 |    2 |   13 |    2 |    2 | 2020-03-17 | p6   |    17 | absent  |
|   9 |    2 |   13 |    2 |    2 | 2020-03-17 | p6   |    18 | present |
|  10 |    2 |   13 |    2 |    2 | 2020-03-17 | p6   |    19 | absent  |
|  11 |    2 |   13 |    2 |    2 | 2020-03-17 | p6   |    20 | present |
|  12 |    2 |   13 |    2 |    2 | 2020-03-17 | p6   |    15 | absent  |
|  13 |    2 |   13 |    4 |    3 | 2020-03-25 | p2   |    16 | present |
|  14 |    2 |   13 |    4 |    3 | 2020-03-25 | p2   |    17 | present |
|  15 |    2 |   13 |    4 |    3 | 2020-03-25 | p2   |    18 | present |
|  16 |    2 |   13 |    4 |    3 | 2020-03-25 | p2   |    19 | present |
|  17 |    2 |   13 |    4 |    3 | 2020-03-25 | p2   |    20 | present |
|  18 |    2 |   13 |    4 |    3 | 2020-03-25 | p2   |    15 | present |
|  19 |    2 |   13 |    4 |    3 | 2020-03-25 | p8   |    16 | absent  |
|  20 |    2 |   13 |    4 |    3 | 2020-03-25 | p8   |    17 | absent  |
|  21 |    2 |   13 |    4 |    3 | 2020-03-25 | p8   |    18 | present |
|  22 |    2 |   13 |    4 |    3 | 2020-03-25 | p8   |    19 | present |
|  23 |    2 |   13 |    4 |    3 | 2020-03-25 | p8   |    20 | present |
|  24 |    2 |   13 |    4 |    3 | 2020-03-25 | p8   |    15 | absent  |
+-----+------+------+------+------+------------+------+-------+---------+
24 rows in set (0.00 sec)

Теперь я собираюсь группировать таблицу, но возвращает значение в 0. При группировании таблицы она возвращает каждый столбец значение возвращается в 0. Почему это произошло. Мне нужно присутствовать или отсутствовать вместо 0. Может кто-нибудь решить эту ошибку c?

query also attached

Ответы [ 3 ]

1 голос
/ 31 марта 2020

sum(case when hour = 'P1' then status else 'null' end) p1

Проблема в том, что вы суммируете числа и буквенную строку 'null'.

Вы хотели null (без кавычек) - или, что еще лучше, 0

sum(case when hour = 'p1' then status else 0 end) p1

Обратите внимание, что в MySQL оценивает условия истина / ложь как 1/0 в контексте нумерации c, что позволяет сократить выражение следующим образом:

sum(hour = 'p1') p1
0 голосов
/ 01 апреля 2020

Наконец-то я нашел решение, основанное на предыдущих ошибках

create view attendance1 as(
select attendance.*,
case when hour="p1" then status end as p1,
case when hour="p2" then status end as p2,
case when hour="p3" then status end as p3,
case when hour="p4" then status end as p4,
case when hour="p5" then status end as p5,
case when hour="p6" then status end as p6,
case when hour="p7" then status end as p7,
case when hour="p8" then status end as p8
from attendance);

mysql> select * from attendance1;
+------+------+------+------+------------+------+-------+---------+---------+---------+------+------+------+------+------+------+
| sid  | cid  | ttid | did  | date       | hour | stuid | status  | p1      | p2      | p3   | p4   | p5   | p6   | p7   | p8   |
+------+------+------+------+------------+------+-------+---------+---------+---------+------+------+------+------+------+------+
|    2 |   13 |    4 |    3 | 2020-04-22 | p1   |    16 | present | present | NULL    | NULL | NULL | NULL | NULL | NULL | NULL |
|    2 |   13 |    4 |    3 | 2020-04-22 | p1   |    17 | absent  | absent  | NULL    | NULL | NULL | NULL | NULL | NULL | NULL |
|    2 |   13 |    4 |    3 | 2020-04-22 | p1   |    18 | present | present | NULL    | NULL | NULL | NULL | NULL | NULL | NULL |
|    2 |   13 |    4 |    3 | 2020-04-22 | p1   |    19 | absent  | absent  | NULL    | NULL | NULL | NULL | NULL | NULL | NULL |
|    2 |   13 |    4 |    3 | 2020-04-22 | p1   |    20 | present | present | NULL    | NULL | NULL | NULL | NULL | NULL | NULL |
|    2 |   13 |    4 |    3 | 2020-04-22 | p1   |    15 | absent  | absent  | NULL    | NULL | NULL | NULL | NULL | NULL | NULL |
|    2 |   13 |    4 |    3 | 2020-04-22 | p2   |    16 | absent  | NULL    | absent  | NULL | NULL | NULL | NULL | NULL | NULL |
|    2 |   13 |    4 |    3 | 2020-04-22 | p2   |    17 | present | NULL    | present | NULL | NULL | NULL | NULL | NULL | NULL |
|    2 |   13 |    4 |    3 | 2020-04-22 | p2   |    18 | absent  | NULL    | absent  | NULL | NULL | NULL | NULL | NULL | NULL |
|    2 |   13 |    4 |    3 | 2020-04-22 | p2   |    19 | present | NULL    | present | NULL | NULL | NULL | NULL | NULL | NULL |
|    2 |   13 |    4 |    3 | 2020-04-22 | p2   |    20 | absent  | NULL    | absent  | NULL | NULL | NULL | NULL | NULL | NULL |
|    2 |   13 |    4 |    3 | 2020-04-22 | p2   |    15 | present | NULL    | present | NULL | NULL | NULL | NULL | NULL | NULL |
+------+------+------+------+------------+------+-------+---------+---------+---------+------+------+------+------+------+------+
12 rows in set (0.00 sec)

На основании первого просмотра я создам второе представление

mysql>
create view attendance2 as(
select stuid,
max(p1)as p1,
max(p2)as p2,
max(p3)as p3,
max(p4)as p4,
max(p5)as p5,
max(p6)as p6,
max(p7)as p7,
max(p8)as p8
from attendance1
group by stuid);

mysql> select * from attendance2;
+-------+---------+---------+------+------+------+------+------+------+
| stuid | p1      | p2      | p3   | p4   | p5   | p6   | p7   | p8   |
+-------+---------+---------+------+------+------+------+------+------+
|    15 | absent  | present | NULL | NULL | NULL | NULL | NULL | NULL |
|    16 | present | absent  | NULL | NULL | NULL | NULL | NULL | NULL |
|    17 | absent  | present | NULL | NULL | NULL | NULL | NULL | NULL |
|    18 | present | absent  | NULL | NULL | NULL | NULL | NULL | NULL |
|    19 | absent  | present | NULL | NULL | NULL | NULL | NULL | NULL |
|    20 | present | absent  | NULL | NULL | NULL | NULL | NULL | NULL |
+-------+---------+---------+------+------+------+------+------+------+
6 rows in set (0.00 sec)

Спасибо за предыдущие вопросы, на которые ответил человек.

0 голосов
/ 31 марта 2020
create view attendance1 as(
select attendance.stuid,
case when hour="p1" then status end as p1,
case when hour="p2" then status end as p2,
case when hour="p3" then status end as p3,
case when hour="p4" then status end as p4,
case when hour="p5" then status end as p5,
case when hour="p6" then status end as p6,
case when hour="p7" then status end as p7,
case when hour="p8" then status end as p8
from attendance);

select * from attendance1;

mysql> select * from attendance1;
+-----+------+------+------+------+------------+------+-------+---------+---------+---------+------+------+------+---------+------+---------+
| aid | sid  | cid  | ttid | did  | date       | hour | stuid | status  | p1      | p2      | p3   | p4   | p5   | p6      | p7   | p8      |
+-----+------+------+------+------+------------+------+-------+---------+---------+---------+------+------+------+---------+------+---------+
|   1 |    2 |   13 |    4 |    3 | 2020-03-25 | p1   |    16 | present | present | NULL    | NULL | NULL | NULL | NULL    | NULL | NULL    |
|   2 |    2 |   13 |    4 |    3 | 2020-03-25 | p1   |    17 | absent  | absent  | NULL    | NULL | NULL | NULL | NULL    | NULL | NULL    |
|   3 |    2 |   13 |    4 |    3 | 2020-03-25 | p1   |    18 | present | present | NULL    | NULL | NULL | NULL | NULL    | NULL | NULL    |
|   4 |    2 |   13 |    4 |    3 | 2020-03-25 | p1   |    19 | absent  | absent  | NULL    | NULL | NULL | NULL | NULL    | NULL | NULL    |
|   5 |    2 |   13 |    4 |    3 | 2020-03-25 | p1   |    20 | present | present | NULL    | NULL | NULL | NULL | NULL    | NULL | NULL    |
|   6 |    2 |   13 |    4 |    3 | 2020-03-25 | p1   |    15 | absent  | absent  | NULL    | NULL | NULL | NULL | NULL    | NULL | NULL    |
|   7 |    2 |   13 |    2 |    2 | 2020-03-17 | p6   |    16 | present | NULL    | NULL    | NULL | NULL | NULL | present | NULL | NULL    |
|   8 |    2 |   13 |    2 |    2 | 2020-03-17 | p6   |    17 | absent  | NULL    | NULL    | NULL | NULL | NULL | absent  | NULL | NULL    |
|   9 |    2 |   13 |    2 |    2 | 2020-03-17 | p6   |    18 | present | NULL    | NULL    | NULL | NULL | NULL | present | NULL | NULL    |
|  10 |    2 |   13 |    2 |    2 | 2020-03-17 | p6   |    19 | absent  | NULL    | NULL    | NULL | NULL | NULL | absent  | NULL | NULL    |
|  11 |    2 |   13 |    2 |    2 | 2020-03-17 | p6   |    20 | present | NULL    | NULL    | NULL | NULL | NULL | present | NULL | NULL    |
|  12 |    2 |   13 |    2 |    2 | 2020-03-17 | p6   |    15 | absent  | NULL    | NULL    | NULL | NULL | NULL | absent  | NULL | NULL    |
|  13 |    2 |   13 |    4 |    3 | 2020-03-25 | p2   |    16 | present | NULL    | present | NULL | NULL | NULL | NULL    | NULL | NULL    |
|  14 |    2 |   13 |    4 |    3 | 2020-03-25 | p2   |    17 | present | NULL    | present | NULL | NULL | NULL | NULL    | NULL | NULL    |
|  15 |    2 |   13 |    4 |    3 | 2020-03-25 | p2   |    18 | present | NULL    | present | NULL | NULL | NULL | NULL    | NULL | NULL    |
|  16 |    2 |   13 |    4 |    3 | 2020-03-25 | p2   |    19 | present | NULL    | present | NULL | NULL | NULL | NULL    | NULL | NULL    |
|  17 |    2 |   13 |    4 |    3 | 2020-03-25 | p2   |    20 | present | NULL    | present | NULL | NULL | NULL | NULL    | NULL | NULL    |
|  18 |    2 |   13 |    4 |    3 | 2020-03-25 | p2   |    15 | present | NULL    | present | NULL | NULL | NULL | NULL    | NULL | NULL    |
|  19 |    2 |   13 |    4 |    3 | 2020-03-25 | p8   |    16 | absent  | NULL    | NULL    | NULL | NULL | NULL | NULL    | NULL | absent  |
|  20 |    2 |   13 |    4 |    3 | 2020-03-25 | p8   |    17 | absent  | NULL    | NULL    | NULL | NULL | NULL | NULL    | NULL | absent  |
|  21 |    2 |   13 |    4 |    3 | 2020-03-25 | p8   |    18 | present | NULL    | NULL    | NULL | NULL | NULL | NULL    | NULL | present |
|  22 |    2 |   13 |    4 |    3 | 2020-03-25 | p8   |    19 | present | NULL    | NULL    | NULL | NULL | NULL | NULL    | NULL | present |
|  23 |    2 |   13 |    4 |    3 | 2020-03-25 | p8   |    20 | present | NULL    | NULL    | NULL | NULL | NULL | NULL    | NULL | present |
|  24 |    2 |   13 |    4 |    3 | 2020-03-25 | p8   |    15 | absent  | NULL    | NULL    | NULL | NULL | NULL | NULL    | NULL | absent  |
+-----+------+------+------+------+------------+------+-------+---------+---------+---------+------+------+------+---------+------+---------+
24 rows in set (0.02 sec)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...