LINUX.ORG.RU

PostgreSQL - сложный запрос

 ,


0

1

Подскажите почему ругается PostgreSQL

SELECT date::date,
(
SELECT concat_ws(' ', user_cards.last_name, user_cards.first_name, user_cards.father_name),
    (SELECT MIN(start_time) FROM calls_moizvonki WHERE user_account = user_cards.email AND answer_time::text LIKE '2022-01-24%' AND answered=1) AS start_day,
    (SELECT COUNT(*) FROM calls_moizvonki WHERE user_account = user_cards.email AND answer_time::text LIKE '2022-01-24%' AND answered=1) AS calls,
    (SELECT AVG(duration) FROM calls_moizvonki WHERE user_account = user_cards.email AND answer_time::text LIKE '2022-01-24%' AND answered=1 AND duration>10) AS duration
FROM user_cards
)
FROM generate_series(
  '2022-01-20%'::date,
  '2022-01-24'::date,
  '1 day'::interval
) date;

ERROR: subquery must return only one column



Последнее исправление: maxcom (всего исправлений: 1)

Ответ на: комментарий от Legioner

Не совсем так, правильно будет, потому что:

ОШИБКА: подзапрос должен возвращать только один столбец
vvn_black ★★★★★
()
Последнее исправление: vvn_black (всего исправлений: 1)
Ответ на: комментарий от Legioner

Да, но при этом двухуровневый запрос работает без проблем

SELECT date::date,
    (SELECT MIN(start_time) FROM calls_moizvonki WHERE answer_time::date = date AND answered=1) AS start_day,
    (SELECT COUNT(*) FROM calls_moizvonki WHERE answer_time::date=date AND answered=1) AS calls,
    (SELECT AVG(duration) FROM calls_moizvonki WHERE answer_time::date=date AND answered=1 AND duration>10) AS duration
FROM generate_series(
  '2022-01-20%'::date,
  '2022-01-24'::date,
  '1 day'::interval
) date;

    date    |      start_day      | calls |       duration       
------------+---------------------+-------+----------------------
 2022-01-20 | 2022-01-20 08:05:38 |   650 | 205.2850241545893720
 2022-01-21 | 2022-01-21 08:00:34 |   562 | 211.3147632311977716
 2022-01-22 | 2022-01-22 11:26:21 |     8 | 429.5000000000000000
 2022-01-23 | 2022-01-23 10:10:44 |     4 |                     
 2022-01-24 | 2022-01-24 08:09:32 |   524 | 206.6870026525198939
(5 rows)


delidov_george
() автор топика
Ответ на: комментарий от vvn_black

Насколько понимаю нужно использовать JOIN, но запрос «зависает» и ничего не возвращает.


SELECT date::date
FROM generate_series(
  '2022-01-20%'::date,
  '2022-01-24'::date,
  '1 day'::interval
) date
JOIN
(
    SELECT concat_ws(' ', user_cards.last_name, user_cards.first_name, user_cards.father_name),
        (SELECT MIN(start_time) FROM calls_moizvonki WHERE user_account = user_cards.email AND answer_time::date=date AND answered=1) AS start_day,
        (SELECT COUNT(*) FROM calls_moizvonki WHERE user_account = user_cards.email AND answer_time::date=date AND answered=1) AS calls,
        (SELECT AVG(duration) FROM calls_moizvonki WHERE user_account = user_cards.email AND answer_time::date=date AND answered=1 AND duration>10) AS duration
    FROM user_cards
);
delidov_george
() автор топика
Ответ на: комментарий от delidov_george

Да, JOIN вроде как выглядит логичнее подзапросов, но он делается совсем не так, как вы пробуете.

vvn_black ★★★★★
()
Ответ на: комментарий от delidov_george

Опишите, что вам нужно: опишите таблицы, связи и что вы хотите получить. Вам тут напишут запрос даже, скорее всего, бесплатно. И даже может я напишу.

И это пока не сложный запрос.

Shadow ★★★★★
()
Последнее исправление: Shadow (всего исправлений: 1)
Ответ на: комментарий от Shadow

Есть таблица со звонками calls_moizvonki

 id            | integer                     |           | not null | nextval('calls_moizvonki_id_seq'::regclass)
 db_call_id    | integer                     |           | not null | 
 user_account  | character varying           |           | not null | 
 direction     | integer                     |           |          | 
 src_number    | character varying           |           |          | 
 client_number | character varying           |           |          | 
 start_time    | timestamp without time zone |           |          | 
 answer_time   | timestamp without time zone |           |          | 
 end_time      | timestamp without time zone |           |          | 
 duration      | integer                     |           |          | 
 answered      | integer                     |           |          | 

Есть таблица с пользователями user_cards:

 uuid        | uuid              |           | not null | 
 last_name   | character varying |           |          | 
 first_name  | character varying |           |          | 
 father_name | character varying |           |          | 
 birthday    | date              |           |          | CURRENT_TIMESTAMP
 start_day   | date              |           |          | CURRENT_TIMESTAMP
 end_day     | date              |           |          | CURRENT_TIMESTAMP
 telefon     | character varying |           |          | 
 email       | character varying |           |          | 
 snils       | character varying |           |          | 
 inn         | character varying |           |          | 
 amocrm_id   | integer           |           |          | 

Связь между таблицами через user_cards.email и calls_moizvonki.user_account. Суть что бы запрос ниже выполнился рекурсивно для каждого дня начиная с первой заданной даты и заканчивая последней. Итог, конечно же, таблица.


SELECT concat_ws(' ', user_cards.last_name, user_cards.first_name, user_cards.father_name),
 (SELECT MIN(start_time) FROM calls_moizvonki WHERE user_account = user_cards.email AND answer_time::date='2022-01-24' AND answered=1) AS start_day,
 (SELECT COUNT(*) FROM calls_moizvonki WHERE user_account = user_cards.email AND answer_time::date='2022-01-24' AND answered=1) AS calls,
 (SELECT AVG(duration) FROM calls_moizvonki WHERE user_account = user_cards.email AND answer_time::date='2022-01-24' AND answered=1 AND duration>10) AS duration
FROM user_cards

 Солоникина Оксана             | 2022-01-24 09:23:32 |    53 | 156.4736842105263158
 Салиева Регина                | 2022-01-24 09:59:46 |    11 | 174.1111111111111111
 Каиш Зорина                   | 2022-01-24 09:40:02 |    46 | 226.2903225806451613
 Пехота Дарья                  | 2022-01-24 09:27:22 |    55 | 148.5483870967741935
 Ким Владимир                  | 2022-01-24 09:28:52 |    35 | 303.0000000000000000
 Рахимьянов Рустем             |                     |     0 |                     
 Тимофеева Екатерина           | 2022-01-24 09:19:40 |    57 | 254.4594594594594595
 Воронов Илья                  | 2022-01-24 09:13:18 |    60 | 215.2564102564102564
  Куратор                      |                     |     0 |                     
 Бобылев Евгений               | 2022-01-24 14:41:08 |     4 | 737.2500000000000000
 Тереньтев Игорь               |                     |     0 |                     
 Чичкин Андрей                 |                     |     0 |                     
 Литвинов Игорь                | 2022-01-24 09:03:09 |    53 | 206.2558139534883721
 Терентьев Игорь Иванович      |                     |     0 |                     
 Терьентьев Игорь              |                     |     0 |                     
 Терентьев Игорь               |                     |     0 |                     
 Ветлугина Анна                |                     |     0 |                     
 Татаренко Александр           | 2022-01-24 09:09:27 |    48 | 280.3030303030303030
 Кривицкая Анастасия           |                     |     0 |                     
 Кривицкая Анастасия           | 2022-01-24 09:30:35 |    34 | 128.6521739130434783
 Дзюин Юрий                    |                     |     0 |                     
 Ромашов Станислав             | 2022-01-24 08:09:32 |    68 | 144.0158730158730159


delidov_george
() автор топика
Ответ на: комментарий от delidov_george

Раскрой немного, что имеется ввиду под

что бы запрос ниже выполнился рекурсивно для каждого дня начиная с первой заданной даты и заканчивая последней

Shadow ★★★★★
()
Ответ на: комментарий от Shadow

Пример вывода с 2022-01-20 по 2022-01-21


 Солоникина Оксана             | 2022-01-20 08:39:05 |    47 | 231.8181818181818182
 Салиева Регина                | 2022-01-20 10:29:27 |    29 | 134.0476190476190476
 Каиш Зорина                   | 2022-01-20 09:18:35 |    53 | 356.4571428571428571
 Пехота Дарья                  | 2022-01-20 09:27:12 |    59 | 237.1250000000000000
 Ким Владимир                  | 2022-01-20 09:17:43 |    50 | 217.6000000000000000
 Рахимьянов Рустем             |                     |     0 |                     
 Тимофеева Екатерина           | 2022-01-20 09:08:43 |    66 | 241.6666666666666667
 Воронов Илья                  | 2022-01-20 09:22:17 |    45 | 325.4000000000000000
  Куратор                      |                     |     0 |                     
 Бобылев Евгений               | 2022-01-20 11:42:00 |     6 | 202.3333333333333333
 Тереньтев Игорь               |                     |     0 |                     
 Чичкин Андрей                 | 2022-01-20 09:11:41 |    33 | 251.5000000000000000
 Литвинов Игорь                | 2022-01-20 09:11:29 |    76 | 146.0000000000000000
 Терентьев Игорь Иванович      |                     |     0 |                     
 Терьентьев Игорь              |                     |     0 |                     
 Терентьев Игорь               |                     |     0 |                     
 Ветлугина Анна                |                     |     0 |                     
 Татаренко Александр           | 2022-01-20 08:15:12 |    62 | 178.8048780487804878
 Кривицкая Анастасия           |                     |     0 |                     
 Кривицкая Анастасия           | 2022-01-20 09:39:15 |    38 | 147.2631578947368421
 Дзюин Юрий                    |                     |     0 |                     
 Ромашов Станислав             | 2022-01-20 08:05:38 |    84 | 113.1466666666666667
  Алексей                      |                     |     0 |                     
 Солоникина Оксана             | 2022-01-21 09:18:51 |    43 | 166.2352941176470588
 Салиева Регина                | 2022-01-21 09:16:52 |    32 | 109.5652173913043478
 Каиш Зорина                   | 2022-01-21 09:15:39 |    46 | 308.0909090909090909
 Пехота Дарья                  | 2022-01-21 09:13:24 |    67 | 180.7058823529411765
 Ким Владимир                  | 2022-01-21 09:19:33 |    37 | 261.7241379310344828
 Рахимьянов Рустем             |                     |     0 |                     
 Тимофеева Екатерина           | 2022-01-21 09:12:53 |    50 | 237.9200000000000000
 Воронов Илья                  | 2022-01-21 09:54:09 |    33 | 240.1904761904761905
  Куратор                      |                     |     0 |                     
 Бобылев Евгений               |                     |     0 |                     
 Тереньтев Игорь               |                     |     0 |                     
 Чичкин Андрей                 | 2022-01-21 09:10:22 |    26 | 397.9166666666666667
 Литвинов Игорь                | 2022-01-21 09:12:03 |    81 | 199.0263157894736842
 Терентьев Игорь Иванович      |                     |     0 |                     
 Терьентьев Игорь              |                     |     0 |                     
 Терентьев Игорь               |                     |     0 |                     
 Ветлугина Анна                |                     |     0 |                     
 Татаренко Александр           | 2022-01-21 09:20:09 |    51 | 230.0000000000000000
 Кривицкая Анастасия           |                     |     0 |                     
 Кривицкая Анастасия           | 2022-01-21 09:37:31 |    36 | 197.8076923076923077
 Дзюин Юрий                    |                     |     0 |                     
 Ромашов Станислав             | 2022-01-21 08:00:34 |    60 | 158.5000000000000000
  Алексей                      |                     |     0 |               
delidov_george
() автор топика
Ответ на: комментарий от delidov_george

Не тупи, там нет подзапросов и джойнов, сделай группировку по 4 столбцам с нужными агрегациями

cobold ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.