powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите составить запрос для сводной таблицы
7 сообщений из 7, страница 1 из 1
Помогите составить запрос для сводной таблицы
    #38585838
cr@nk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток.
Имеется база со следующей структурой:
Пара связанных таблиц
Код: sql
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.
40.
41.
42.
43.
44.
45.
46.
-- Table: merlion

-- DROP TABLE merlion;

CREATE TABLE merlion
(
  id serial NOT NULL,
  article text,
  name text,
  fav boolean DEFAULT false,
  CONSTRAINT merlion_pkey PRIMARY KEY (id)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE merlion
  OWNER TO postgres;
GRANT ALL ON TABLE merlion TO postgres;
GRANT ALL ON TABLE merlion TO public;

-- Index: merlion_article_idx

-- DROP INDEX merlion_article_idx;

CREATE INDEX merlion_article_idx
  ON merlion
  USING btree
  (article COLLATE pg_catalog."default");

-- Index: merlion_name_idx

-- DROP INDEX merlion_name_idx;

CREATE INDEX merlion_name_idx
  ON merlion
  USING btree
  (name COLLATE pg_catalog."default");

-- Index: merlion_name_ops

-- DROP INDEX merlion_name_ops;

CREATE INDEX merlion_name_ops
  ON merlion
  USING gin
  (name COLLATE pg_catalog."default" gin_trgm_ops);


Код: sql
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.
40.
41.
42.
43.
44.
45.
46.
-- Table: merlion_d

-- DROP TABLE merlion_d;

CREATE TABLE merlion_d
(
  id serial NOT NULL,
  id_article integer,
  pricedate date,
  cost text,
  CONSTRAINT merlion_d_pkey PRIMARY KEY (id)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE merlion_d
  OWNER TO postgres;
GRANT ALL ON TABLE merlion_d TO postgres;
GRANT ALL ON TABLE merlion_d TO public;

-- Index: merlion_d_id_article_idx

-- DROP INDEX merlion_d_id_article_idx;

CREATE INDEX merlion_d_id_article_idx
  ON merlion_d
  USING btree
  (id_article);

-- Index: merlion_d_id_article_pricedate_idx

-- DROP INDEX merlion_d_id_article_pricedate_idx;

CREATE INDEX merlion_d_id_article_pricedate_idx
  ON merlion_d
  USING btree
  (id_article, pricedate);

-- Index: merlion_d_pricedate_idx

-- DROP INDEX merlion_d_pricedate_idx;

CREATE INDEX merlion_d_pricedate_idx
  ON merlion_d
  USING btree
  (pricedate);


Таких пар таблиц пара десятков, у всех одинаковая структура (просто меняется название merlion на что-то другое, например resource )
P.S.: Вот линк на тему, где я уже задавал вопросы по этой базе - http://www.sql.ru/forum/1053727/

Это всё таблицы с ценами на товар в разных магазинах.
Есть таблицы с ценами нашего магазина. У них пока такая структура
Также есть 2 таблицы с идентичной структурой. Для конкретики они будут с названием _myshop /

Необходимо вывести такую таблицу:
] myshopdate_myshopmerliondate_merlionresourcedate_resourceТовар 1100р14.03.201480р10.03.201490р14.03.2014Товар 2350р10.10.2013500р14.03.2014--

Вот сейчас возник вопрос с тем, как это лучше сделать? Пока представляю, что надо добавить таблицу
_myshop_link (ID serial, id_article_myshop, shop_name, id_othershop)
Получится условная связь 1-ко-многим.
В колонку shop_name будет заноситься название магазина (название таблицы (merlion, resource и т.д.)), а в колонку id_othershop соотвественно id товара из этого магазина
Код: sql
1.
2.
3.
4.
5.
CREATE TABLE merlion_d
(
  id serial NOT NULL,  // значение этого поля
.........
)



Если местные специалисты сочтут вариант такой связи таблиц годным, то будет следующий вопрос:
Можно ли как-то написать быстрый запрос, который выведет таблицу с той структурой, что я привёл выше? Если такой запрос написать нереально, то тогда как это реализовать?
У меня есть вариант, что надо создавать временную таблицу с этими данными и выполнять запрос по каждой позиции

Уф... вроде постарался изложить всё доступным языком.

Надеюсь на советы и рекомендации
...
Рейтинг: 0 / 0
Помогите составить запрос для сводной таблицы
    #38585946
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cr@nkТаких пар таблиц пара десятков, у всех одинаковая структура (просто меняется название merlion на что-то другое, например resource )
Это всё таблицы с ценами на товар в разных магазинах.возможно, стоит эти таблицы объединить вместе, с дополнительным полем shop_id

cr@nkНеобходимо вывести такую таблицу:
myshopdate_myshopmerliondate_merlionresourcedate_resourceТовар 1100р14.03.201480р10.03.201490р14.03.2014Товар 2350р10.10.2013500р14.03.2014--только по двум магазинам, или по большему числу? надо сделать join запрос.

как вы узнаете, что это один и тот же товар в разных магазинах? строка name может не совпадать?
например 'Apple iPhone 4s (черный)' != 'iphone 4s black'.

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

уровень детализации выбирать каким-то образом. например иметь два разных товара 'Apple iPhone 4s (черный)' и 'Apple iPhone 4s (белый)' или один единственный 'Apple iPhone 4s'?

в таблице (у вас таких много одинаковой структуры) товарных предложений ссылаться на таблицу товаров (моделей).
...
Рейтинг: 0 / 0
Помогите составить запрос для сводной таблицы
    #38585954
cr@nk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LeXa NalBat,
возможно, стоит эти таблицы объединить вместе, с дополнительным полем shop_id
На данном этапе это выглядит как-то нереально. На этих таблицах завязано несколько сервисов + пара десктопных приложений

только по двум магазинам, или по большему числу? надо сделать join запрос.
Больше двух

как вы узнаете, что это один и тот же товар в разных магазинах? строка name может не совпадать?
Да, строки точно будут разные. Поэтому будет ручное сопоставление Название в нашем магазине - id товара в другом магазине
...
Рейтинг: 0 / 0
Помогите составить запрос для сводной таблицы
    #38585985
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cr@nkтолько по двум магазинам, или по большему числу? надо сделать join запрос.Больше двухда, тогда джоин (наверное outer) более чем двух таблиц

cr@nkДа, строки точно будут разные. Поэтому будет ручное сопоставление Название в нашем магазине - id товара в другом магазинев таблицы магазинов добавить поле model_id, которое будет ссылаться на таблицу товаров (ну или прямо на таблицу вашего магазина)

PS: но вы изобретаете велосипед, особенно учитывая "ручное сопоставление". в яндекс.маркете, прайс.ру уже сейчас склеиваются предложения от разных магазинов в одну модель. вам не подходит использовать эти сервисы?
...
Рейтинг: 0 / 0
Помогите составить запрос для сводной таблицы
    #38585990
cr@nk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LeXa NalBat,

PS: но вы изобретаете велосипед, особенно учитывая "ручное сопоставление". в яндекс.маркете, прайс.ру уже сейчас склеиваются предложения от разных магазинов в одну модель. вам не подходит использовать эти сервисы?

В Яндекс.Маркете нет таких магазинов :(
Там в основном розница только.

Некое склеивание будет, но оно будет не идеальным... гораздо хуже, чем у маркета по определённым позициям
...
Рейтинг: 0 / 0
Помогите составить запрос для сводной таблицы
    #38595462
biwed.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cr@nk,
Добрый день.
Не совсем простая задача, так как Pivot или crosstab в СУБД не очень то и хороши, а очень жаль. Да и JOIN не выход, так как необходимо вернуть в конечном итоге 1 таблицу (циклы либо супер запрос).
Предлагаю не совсем стандартный подход. Таблицы собрать в одну (union all):

shop_name tovar_name date cost
"myshop" "Товар 1" 14.03.2014 100
"myshop" "Товар 2" 10.10.2013 350
"merlion" "Товар 1" 10.03.2014 80
"merlion" "Товар 2" 14.03.2014 500
"resource" "Товар 1" 14.03.2014 90

1. Если количество результирующих строк меньше 200 000, то решай через сводные таблице в Excel. Очень просто, особенно если конечная табличка должна представлять Excel файл.
2. Пытаться применить crosstab. Ссылка тут http://www.sql.ru/forum/753420/pivot-est-v-postgres
3. Если больше, то можно поставить задачу на проектирование OLAP куба. Ну это совсем не тривиально, хотя и не сложно. MDX более лучше в этом плане чем SQL. Путь не совсем близкий.......

Рекомендации: На счет товара, то нужно использовать closure таблицы, иначе будет все криво.
...
Рейтинг: 0 / 0
Помогите составить запрос для сводной таблицы
    #38595636
cr@nk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
biwed.ru,

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


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