powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Составление запроса
12 сообщений из 12, страница 1 из 1
Составление запроса
    #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
Составление запроса
    #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
Составление запроса
    #39080963
Alexius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexius,

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

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

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

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

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

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

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



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

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

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


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