Как вы передаете переменную в подзапрос? - PullRequest
0 голосов
/ 16 мая 2019

У меня есть база данных с 5 datetime, которые являются текстовыми типами данных.Значения: 4/15/12 1:47 (тип FT), 9/8/12 20:02 (тип FT), 5/10/13 22:21 (тип FT), 3/3/13 4:46 (тип FT) и 2/9/12 4:19 (тип NL).Я хочу посчитать количество событий, происходящих за каждый час, а затем разделить его на общее количество событий.

Поскольку столбец имеет текстовый тип данных, я выбираю час с помощью следующего кода: hour(str_to_Date(order_placer_placed_time,'%m/%d/%Y %H:%i').

Код, который я пробовал:

select (
(select count(*) from col where type = 'ft' and hour(str_to_Date(time,'%m/%d/%Y %H:%i')) = 4
group by type)
/count(*)) as 'FT %', 
hour(str_to_Date(time,'%m/%d/%Y %H:%i')) as hour
from col
group by hour
order by hour;

Мне нужно изменить 4 в моем подзапросе на все часовые сегменты каждого дня, чтобы я мог вернуть результат, который показывает мне% людей в футах, поделенных на общее число людей.

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

Окончательный результат должен выглядеть следующим образом:

1 100%
4 50%
20 100%
22 100%

1 Ответ

2 голосов
/ 16 мая 2019

Может быть, вы просто хотите что-то вроде этого

drop table if exists col;

create table col
(type varchar(3),ts varchar(20));

insert into col values
('ft','1/2/2019 1:47'),('ft','1/2/2019 20:02'),('ft','1/2/2019 22:21'),('ft','1/2/2019 1:47'),('ft','1/2/2019 4:19'),
('ft','1/3/2019 1:47'),('nl','1/3/2019 4:19');

select hour(str_to_Date(ts,'%m/%d/%Y %H:%i')) as hour,
        sum(case when type = 'ft' then 1 else 0 end) obsft,
        count(*) obsall,

        sum(case when type = 'ft' then 1 else 0 end) /
        count(*) * 100 as perft
from col
group by hour(str_to_Date(ts,'%m/%d/%Y %H:%i')) 

union
select 25,
        sum(case when type = 'ft' then 1 else 0 end) obsft,
        count(*) obsall,

        sum(case when type = 'ft' then 1 else 0 end) /
        count(*) * 100 as perft

from col;

+------+-------+--------+----------+
| hour | obsft | obsall | perft    |
+------+-------+--------+----------+
|    1 |     3 |      3 | 100.0000 |
|    4 |     1 |      2 |  50.0000 |
|   20 |     1 |      1 | 100.0000 |
|   22 |     1 |      1 | 100.0000 |
|   25 |     6 |      7 |  85.7143 |
+------+-------+--------+----------+
5 rows in set (0.00 sec)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...