Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Составление запроса / 12 сообщений из 12, страница 1 из 1
20.10.2015, 10:32
    #39080932
vlad_gg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составление запроса
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
Добрый день,

Помогите пожалуйста с запросом.
Есть таблица, в которой хранятся данные о внесении денег в кассы. Упрощаю, но у нее примерно такой вид:

Пополнения касс
----------------
id (serial)
date (date)  -- дата внесения денег
cassa_id (fk) -- id кассы
payment_type (enum "1", "2") -- тип платежа (наличные, банк. карточка)
amount (numeric) -- сумма платежа

Представим что в таблице есть такие данные:
id|   date     | cassa_id | payment_type | amount  |
----------------------------------------------------
1 | 2015-10-20 |    1     |       1      |    10   |
2 | 2015-10-20 |    1     |       2      |    5    |
3 | 2015-10-20 |    2     |       1      |    7    |
4 | 2015-10-20 |    2     |       2      |    6    |
5 | 2015-10-20 |    1     |       1      |    2    |


Руководство хочет обобщенную статистику по кассам за определенный день:
- суммы денег, внесенных в кассы за день
- суммы внесенных денег отдельно по каждому типу платежа
- количество платежей по каждому типу платежа.

С данными выше, результат должен быть таким:
id кассы | Всего внесено | Внесено наличными | Внесено банк. картой | Всего внесений наличными | Всего внесений по карте |
--------------------------------------------------------------------------------------------------------------------------
Касса 1 |       17       |        12         |          5           |             2           |            1             |
Касса 2 |       13       |        7          |          6           |             1           |            1             |


Вопрос:
Можно ли это уместить в один запрос и если да, подскажите пожалуйста как он должен выглядеть.


Спасибо
...
Рейтинг: 0 / 0
20.10.2015, 10:41
    #39080956
Alexius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составление запроса
vlad_gg,

смотреть в сторону

Код: sql
1.
2.
3.
select sum(case when payment_type = 1 then amount else 0 end), ...
...
group by cassa_id



вместо даты обычно лучше использовать timestamp для хранения транзакций, но тут конечно от задачи зависит.
...
Рейтинг: 0 / 0
20.10.2015, 10:44
    #39080963
Alexius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составление запроса
Alexius,

а если версия базы 9.4, то и через filter можно писать.
...
Рейтинг: 0 / 0
20.10.2015, 10:49
    #39080973
vlad_gg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составление запроса
AlexiusAlexius,

а если версия базы 9.4, то и через filter можно писать.

Спасибо, читаю
...
Рейтинг: 0 / 0
20.10.2015, 15:15
    #39081369
roadster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составление запроса
...
Рейтинг: 0 / 0
20.10.2015, 15:32
    #39081395
Author the new one
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составление запроса
roadstervlad_gg,

http://postgresql.ru.net/manual/tutorial-window.html
Оконные функции штука, конечно, офигенная, только тут они причем? Не морочьте человеку голову.
...
Рейтинг: 0 / 0
20.10.2015, 15:39
    #39081417
roadster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составление запроса
Author the new oneтолько тут они причем?нет, не нужны?
ну нет, так нет.
...
Рейтинг: 0 / 0
20.10.2015, 15:41
    #39081430
Author the new one
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составление запроса
roadsterAuthor the new oneтолько тут они причем?нет, не нужны?
ну нет, так нет.

Не нужны. Вон Alexius все написал.
...
Рейтинг: 0 / 0
20.10.2015, 22:48
    #39081867
vlad_gg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составление запроса
Alexius,

Там конечно timestamp стоит, я упростил.
У меня получилось сделать ту часть запроса которая подсчитывает суммы по типам платежей (точно по вашему примеру).

Общее количество платежей в кассе за день легко получить через
Код: plsql
1.
SELECT count(cassa_id) ... GROUP BY cassa_id



Однако как сделать подсчет количества платежей по типам платежа до сих пор непонятно.
...
Рейтинг: 0 / 0
21.10.2015, 11:40
    #39082193
Alexius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составление запроса
vlad_gg,

точно так же, через сумму. вместо amount только вписать 1.
...
Рейтинг: 0 / 0
21.10.2015, 12:00
    #39082224
p2.
p2.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составление запроса
Alexiusточно так же, через сумму. вместо amount только вписать 1.для подсчета количества count как-то привычнее.
...
Рейтинг: 0 / 0
22.10.2015, 14:11
    #39083569
roadster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составление запроса
vlad_ggОднако как сделать подсчет количества платежей по типам платежа до сих пор непонятно.может быть всё таки что-то вроде
Код: sql
1.
COUNT(*) OVER (PARTITION BY payment_type, cassa_id ORDER BY  cassa_id)

?
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Составление запроса / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]