Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Сводная таблица / 25 сообщений из 48, страница 1 из 2
01.06.2018, 08:03
    #39653687
o.makarov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная таблица
Всем доброго дня, друзья. Я пока ещё нуб в sql запросах, прошу помочь или наставить на путь истинный.

Написал запрос

SELECT to_char(cc.date, 'YYYY-MM'), ca.company, sum(cc.total_with_vat), cc.account, cc.service
FROM cc
left join ca
on cc.account = ca.account
where cc.account like '200%' and cc.service ='IP' and ca.company like '%Новосибирск%'
group by to_char(cc.date, 'YYYY-MM'), cc.account, cc.service, ca.company


Всё это выгружается в формате:
2016-01|Новосибирск|300|1|IP
2016-01|Новосибирск|500|2|IP
.. |Новосибирск|800|3|IP

Мне нужно эти данные выгрузить в эксель, проблема в том, чтобы выгрузить историю, необходимо выгружать около 10 раз, используя limit и offset, чтобы по количеству строк влазило на лист экселя

как можно сделать так, чтобы таблица выгружалась в формате, где даты будут в стобцах, то есть: 2016-01|2016-02 и т.д., а в строках соответственно остальные показатели, таким образом можно всё выгрузить за один запрос.

Почитал в интернете инфу, всё написано достаточно сложно для моего восприятия, поскольку я пока что не знаю многих тонкостей.

Если есть у кого свободные 10-15 минут, уделите время или киньте ссылок, где это более менее доступным языком описано (именно на базе postgresql)
...
Рейтинг: 0 / 0
01.06.2018, 08:10
    #39653689
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная таблица
1.А выгрузить один раз, а потом уже в EXELe разбить по страницам?
2. пивот.
...
Рейтинг: 0 / 0
01.06.2018, 08:13
    #39653691
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная таблица
o.makarov,

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

Примитивные и интуитивно-понятные вариант реализации можно посмотреть тут , или тут .
не совсем по PostgreSQL, но смысл вполне себе ясен... ;)

Если число столбцов заведомо неизвестно, то смотреть в сторону динамического запроса...
...
Рейтинг: 0 / 0
01.06.2018, 08:15
    #39653694
o.makarov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная таблица
982183,

поясните, если не сложно, я выгружаю через pg_admin в csv, потом когда открываю файл через эксель, он пишет, что данные обрезаны из-за того, что строк не хватает

Вообще конечно хочу научиться в формате сводной делать, но пока такой вариант тоже подойдёт
...
Рейтинг: 0 / 0
01.06.2018, 08:16
    #39653695
o.makarov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная таблица
Щукина Анна,

спасибо, обязательно почитаю)
...
Рейтинг: 0 / 0
01.06.2018, 11:36
    #39653839
tip78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная таблица
надо крупно написать на форуме: ПОКАЖИТЕ ИСХОДНЫЕ ТАБЛИЦЫ И ЖЕЛАЕМЫЙ РЕЗУЛЬТАТ
только тогда вам смогут помочь

превратили приличное место в форум телепатов, тьфу
...
Рейтинг: 0 / 0
01.06.2018, 13:38
    #39653968
o.makarov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная таблица
tip78,

запрос:

SELECT to_char(cc.date, 'YYYY-MM'), ca.company, sum(cc.total_with_vat), cc.account, cc.service
FROM cc
left join ca
on cc.account = ca.account
where cc.account like '200%' and cc.service ='IP' and ca.company like '%Новосибирск%'
group by to_char(cc.date, 'YYYY-MM'), cc.account, cc.service, ca.company


Что выгружает:
to_char base_company sum account_number service2016-01 Сибирские Сети Новосибирск 300 2E+12 IP2016-01 Сибирские Сети Новосибирск 300 2E+12 IP2016-01 Сибирские Сети Новосибирск 635 2E+12 IP

Что нужно:

base_company account_number 2016-01 2016-02 2016-03 2016-04 2016-05 2016-06 2016-07 2016-08 2016-09 2016-10 2016-11Сибирские Сети Новосибирск 2E+12 300 300 300 300 300 300 300 300 300 300 300Сибирские Сети Новосибирск 2E+12 45039 8194 3175 635 635Сибирские Сети Новосибирск 2E+12 300 300 300 300 300 300 300 300 300 300 300
...
Рейтинг: 0 / 0
01.06.2018, 13:41
    #39653971
o.makarov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная таблица
tip78,

запрос:

SELECT to_char(cc.date, 'YYYY-MM'), ca.company, sum(cc.total_with_vat), cc.account, cc.service
FROM cc
left join ca
on cc.account = ca.account
where cc.account like '200%' and cc.service ='IP' and ca.company like '%Новосибирск%'
group by to_char(cc.date, 'YYYY-MM'), cc.account, cc.service, ca.company


Что выгружает:
to_char base_company sum account_number service2016-01 Новосибирск 300 2E+12 IP2016-01 Новосибирск 300 2E+12 IP2016-01 Новосибирск 635 2E+12 IP

Что нужно:

base_company account_number 2016-01 2016-02 2016-03 2016-04 2016-05 2016-06 2016-07 2016-08 2016-09 2016-10 2016-11Новосибирск 2E+12 300 300 300 300 300 300 300 300 300 300 300Новосибирск 2E+12 45039 8194 3175 635 635 Новосибирск 2E+12 300 300 300 300 300 300 300 300 300 300 300
...
Рейтинг: 0 / 0
01.06.2018, 14:42
    #39654028
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная таблица
o.makarov982183,

поясните, если не сложно, я выгружаю через pg_admin в csv, потом когда открываю файл через эксель, он пишет, что данные обрезаны из-за того, что строк не хватает

Вообще конечно хочу научиться в формате сводной делать, но пока такой вариант тоже подойдёт

Какая версия екселя?

Сколько строк в оькрываемом буфере?
...
Рейтинг: 0 / 0
01.06.2018, 16:48
    #39654119
tip78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная таблица
o.makarov, таблицы исходные
непонятно же нихрена, что за "cc.account like '200%'", а в результатах его НЕТ
почему в таблице и в запросе разные поля,
и почему такой GROUP BY, можно же было по ca.account группировать
...
Рейтинг: 0 / 0
04.06.2018, 05:21
    #39654624
o.makarov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная таблица
tip78,

ну смотрите - есть список данных: дата, номер, сумма, регион

Эти данные хранятся в базе в таком формате, что на одну дату (и уж тем более на один месяц) приходится несколько сумм по номерам.
Мне нужно, чтобы на один месяц был один номер с общей суммой, поэтому я делаю сумм и группирую по дате, иначе выгрузиться намного больший массив по строкам.

Но поскольку этих номеров очень много, даже при учёте группировке, в идеале нужно, чтобы дата была в столбцах (аналогично сводной таблице), а поскольку я sql только вот начал изучать самостоятельно, я очень многого не знаю. В скриптах, которые я находил в интернете, попросту не могу разобраться, не хватает мне пока ещё знаний и тонкостей синтаксиса.

Во вложении скрин запроса и таблицы (на like можете не обращать внимание, это вывод номеров, которые мне нужны, этот оператор особой роли не играет)
...
Рейтинг: 0 / 0
04.06.2018, 05:22
    #39654625
o.makarov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная таблица
982183,

Эксель 2016, в итоговом csv файле где-то 5-6 млн строк
...
Рейтинг: 0 / 0
04.06.2018, 05:26
    #39654626
o.makarov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная таблица
tip78,

Если группировать по аккаунтам, то будет один аккаунт - одна сумма в общем за все периоды, а мне нужна один аккаунт - одна сумма на каждый месяц (то есть сумма за январь, февраль, март и т.д. по каждому аккаунту)
...
Рейтинг: 0 / 0
04.06.2018, 05:49
    #39654627
angel_zar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная таблица
Сводную таблицу, лучше делать в клиентской части, возможно в том же экселе или еще чем.
...
Рейтинг: 0 / 0
04.06.2018, 05:50
    #39654628
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная таблица
o.makarov в итоговом csv файле где-то 5-6 млн строк
Теперь понятно.
Может легче будет сменить инструмент?
EXCEL явно не то, на чем обрабатываются такие объемы.
...
Рейтинг: 0 / 0
04.06.2018, 05:57
    #39654629
angel_zar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная таблица
982183o.makarov в итоговом csv файле где-то 5-6 млн строк
Теперь понятно.
Может легче будет сменить инструмент?
EXCEL явно не то, на чем обрабатываются такие объемы.
Если к Excel, прицепить этот CSV в качестве источника данных, то при построении сводной таблицы, он будет использовать все данные (если результирующих строк будет больше 1М+, то он результат обрежет, но вроде предупреждение выдаст, что не может все отобразить), не скажу что это ему легко дастся, но работать с ними, он вполне в состоянии.
...
Рейтинг: 0 / 0
04.06.2018, 06:03
    #39654630
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная таблица
o.makarovtip78,

Если группировать по аккаунтам, то будет один аккаунт - одна сумма в общем за все периоды, а мне нужна один аккаунт - одна сумма на каждый месяц (то есть сумма за январь, февраль, март и т.д. по каждому аккаунту)

Группировать тебе надо по акаунту, а периоды вывести или через PIVOT или через CASE

Примерно так:

SELECT CASE WHEN to_char(cc.date, 'YYYY-MM'), ="2018-1" THEN sum(cc.total_with_vat) END as 2018-1,
CASE WHEN to_char(cc.date, 'YYYY-MM'), ="2018-2" THEN sum(cc.total_with_vat) END as 2018-2,
,,,
CASE WHEN to_char(cc.date, 'YYYY-MM'), ="2018-12" THEN sum(cc.total_with_vat) END as 2018-12,

синтаксис на PostgreSQL точно на подскажу
...
Рейтинг: 0 / 0
04.06.2018, 06:05
    #39654631
o.makarov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная таблица
angel_zar,

Насчёт экселя, конечно проще, но мне в принципе и самому интересно, как можно строить сводные в самом SQLе

По поводу прицепить csv файл в качестве источника - интересный вариант, строк будет меньше миллиона, не знал, что так можно. Спасибо, попробую)
...
Рейтинг: 0 / 0
04.06.2018, 06:06
    #39654632
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная таблица
angel_zarЕсли к Excel, прицепить этот CSV в качестве источника данных, то при построении сводной таблицы, он будет использовать все данные
Не знал. Надо попробовать.
Но явно ему такие извращения не нужны.
Идея переписать запрос правильная.
Направление с PIVOT либо CASE Анна ему подсказала.
Осталось немного напрячься и сделать.
...
Рейтинг: 0 / 0
04.06.2018, 06:09
    #39654633
o.makarov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная таблица
982183,

Не понимаю пока что - что это и что будет в результате, но спасибо, я попробую сейчас с этим разобраться)

От экселя никуда не уйти, да и куда уйти, я кроме экселя и гугл таблиц похожих интерфейсов не встречал, а конечные пользователи, для которых формируется отчёт - работают в экселе
...
Рейтинг: 0 / 0
04.06.2018, 06:10
    #39654634
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная таблица
982183SELECT CASE WHEN to_char(cc.date, 'YYYY-MM'), ="2018-1" THEN sum(cc.total_with_vat) END as 2018-1,
CASE WHEN to_char(cc.date, 'YYYY-MM'), ="2018-2" THEN sum(cc.total_with_vat) END as 2018-2,
,,,
CASE WHEN to_char(cc.date, 'YYYY-MM'), ="2018-12" THEN sum(cc.total_with_vat) END as 2018-12,

вру
Примерно так:

SELECT sum(CASE WHEN to_char(cc.date, 'YYYY-MM'), ="2018-1" THEN cc.total_with_vat END) as "2018-1",
sum(CASE WHEN to_char(cc.date, 'YYYY-MM'), ="2018-2" THEN cc.total_with_vat END) as "2018-2",
,,,
sum(CASE WHEN to_char(cc.date, 'YYYY-MM'), ="2018-12" THEN cc.total_with_vat END) as "2018-12",
...
Рейтинг: 0 / 0
04.06.2018, 06:12
    #39654635
o.makarov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная таблица
982183,

Подскажите, пожалуйста, а после того, как все CASE заданы, далее я просто дописываю в SELECT то что мне нужно?
...
Рейтинг: 0 / 0
04.06.2018, 07:25
    #39654639
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная таблица
Да, убираешь из группировки to_char(cc.date, 'YYYY-MM') и вставляешь в SELECT то же самое через CASE
...
Рейтинг: 0 / 0
04.06.2018, 08:25
    #39654650
o.makarov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная таблица
982183,

таким образом должно выглядеть? Оставшиеся колонки (сервис, компания и номер) просто дописываются или тоже через CASE?
...
Рейтинг: 0 / 0
04.06.2018, 08:29
    #39654651
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сводная таблица
1. Не прилагай фото, приложи текст.
2. Запятая у меня лишняя после 'YYYY-MM')
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Сводная таблица / 25 сообщений из 48, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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