Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Посчитать количество входящих позиций из присоединенной таблицы для каждой сроки / 7 сообщений из 7, страница 1 из 1
20.01.2017, 17:22
    #39388608
Cola
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать количество входящих позиций из присоединенной таблицы для каждой сроки
Есть две таблицы связанные по трем полям, нужно для каждой позиции посчитать количество входящих туда позиций из присоединенной таблицы. Для примера все поля в секции Select не указывал. На ум пришел вложенный запрос в котором та же связка, но она подсчитывает позиции по всей выборке и в каждой строке одинаковое кол-во позиций. Не понятно как ограничить выборку. Уникального ID по которому связаны таблицы нет - из три...

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
SELECT 
  order_client.code_order, 
  order_client.sum_order,
  wares_order.code_shop,
  ...
   (Select count(*) from pos.wares_order,pos.order_client 
                     Where 
                       order_client.id_workplace=wares_order.id_workplace AND 
                       order_client.code_order=wares_order.code_order AND     
                       wares_order.code_shop=order_client.code_shop) AS "Кол-во позиций"
FROM 
  pos.order_client

Where 
  order_client.id_workplace=wares_order.id_workplace AND 
  order_client.code_order=wares_order.code_order AND     
  wares_order.code_shop=order_client.code_shop) AS "Кол-во позиций"
;
...
Рейтинг: 0 / 0
21.01.2017, 07:31
    #39388828
Alexius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать количество входящих позиций из присоединенной таблицы для каждой сроки
Cola,

если я правильно понял, то нужно просто убрать pos.order_client из from подзапроса чтобы использовалась таблица из внешнего запроса.
...
Рейтинг: 0 / 0
22.01.2017, 00:35
    #39388990
Cola
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать количество входящих позиций из присоединенной таблицы для каждой сроки
Alexius,

Запрос выполняется уже 9 часов .
Есть какой-то другой способ?
...
Рейтинг: 0 / 0
22.01.2017, 07:13
    #39389003
Alexius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать количество входящих позиций из присоединенной таблицы для каждой сроки
Cola,

приведите запрос, explain запроса и описание таблицы pos.wares_order (со всеми индексами). а также вывод запроса

Код: sql
1.
select attname, n_distinct, null_frac, most_common_freqs from pg_stats where tablename = 'wares_order' and attname in ('id_workplace', 'code_order', 'code_shop');
...
Рейтинг: 0 / 0
22.01.2017, 11:45
    #39389033
Cola
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать количество входящих позиций из присоединенной таблицы для каждой сроки
AlexiusCola,
приведите запрос, explain запроса и описание таблицы pos.wares_order (со всеми индексами). а также вывод запроса
Код: sql
1.
select attname, n_distinct, null_frac, most_common_freqs from pg_stats where tablename = 'wares_order' and attname in ('id_workplace', 'code_order', 'code_shop');


Запрос еще выполняется, поэтому пока ничего привести не могу....
Думаю обождать еще час и выключу ели не окончится...
Вот тогда приведу все, что вы попросили.
...
Рейтинг: 0 / 0
22.01.2017, 13:10
    #39389041
Cola
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать количество входящих позиций из присоединенной таблицы для каждой сроки
Alexius,
прервал запрос.
Запрос:
Код: 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.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
Select
  
  (Select count(*) from pos.wares_order 
          Where 
               pos.order_client.id_workplace=pos.wares_order.id_workplace AND 
               pos.order_client.code_order=pos.wares_order.code_order AND     
               wares_order.code_shop=pos.order_client.code_shop) AS "Кол-во позиций"
  
  order_client.date_receipt AS "Дата чека (если чек не выбит)",
  order_client.number_receipt AS "Номер чека(если чек выбит)",
  order_client.date_change AS "Дата изменения",
  order_client.sum_discount AS "Скидка по чеку",
  order_client.number_cash_register AS "Заводской номер кассового аппарата",
  order_client.date_order AS "Дата покупки",
  order_client.sum_order AS "Сумма чека",
 CASE
    WHEN order_client.text_mode=true THEN 'обычный'
    WHEN order_client.text_mode=false THEN 'фискальный'
    ELSE 'неопределен'
  END AS "Режим печати чека",  
 CASE
    WHEN order_client.type_order=0 THEN 'продажа'
    WHEN order_client.type_order=1 THEN 'возврат'
    WHEN order_client.type_order=2 THEN 'лист инвентаризации'
    ELSE 'неопределен'
  END AS "Тип чека",
  order_client.code_z_report AS "Номер Z-отчета в который войдет чек",
 CASE
    WHEN order_client.type_order=0 THEN 'вложенный'
    WHEN order_client.type_order=1 THEN 'наложенный'
    ELSE 'неопределен'
  END AS "Тип НДС",  
  order_client.date_open AS "Дата открытия чека",
  order_client.number_z_report AS "Фискальный номер Z-отчета в который войдет чек",
  order_client.code_order_source AS "Код исходного чека в случае разделения чека на несколько",
  order_client.date_order::date As "Дата чека",
  order_client.date_receipt::time As "Время чека",
  to_char(order_client.date_order,'Month') As "Месяц",
  extract(year from order_client.date_order) as "Год",
  extract(day from order_client.date_order) as "День",
  CASE
    WHEN EXTRACT(dow FROM order_client.date_order)=0 THEN 'Понедельник'
    WHEN EXTRACT(dow FROM order_client.date_order)=1 THEN 'Вторник'
    WHEN EXTRACT(dow FROM order_client.date_order)=2 THEN 'Среда'
    WHEN EXTRACT(dow FROM order_client.date_order)=3 THEN 'Четверг'
    WHEN EXTRACT(dow FROM order_client.date_order)=4 THEN 'Пятница'
    WHEN EXTRACT(dow FROM order_client.date_order)=5 THEN 'Суббота'
    WHEN EXTRACT(dow FROM order_client.date_order)=6 THEN 'Воскресение'
    ELSE '0'
  END AS "День недели",
  pos.order_client.code_order AS "id_Код чека",
  order_client.code_client AS "ID_Код клиента",
  order_client.code_shop AS "ID_Код магазина",
  pos.order_client.id_workplace AS "ID_Код кассы"
FROM 
  pos.order_client;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         



Таблица:
Код: 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.
CREATE TABLE pos.order_client
(
  code_order integer NOT NULL, -- Код заказа
  date_receipt timestamp without time zone, 
  number_receipt integer, 
  code_client integer, 
  code_user integer NOT NULL, 
  date_change timestamp(0) without time zone NOT NULL DEFAULT (now())::timestamp without time zone, 
  sum_discount real, 
  number_cash_register character varying(20), 
  description character varying(250),
  date_order timestamp(0) without time zone NOT NULL DEFAULT ('now'::text)::date, 
  sum_order numeric(15,2), -- Сумма чека
  text_mode boolean DEFAULT false, 
  code_shop integer NOT NULL, 
  id_workplace integer NOT NULL, 
  type_order smallint NOT NULL, 
  code_z_report integer NOT NULL,
  add_info character varying(250), 
  type_vat smallint NOT NULL DEFAULT 0, 
  version_row bigint NOT NULL DEFAULT 0, 
  code_order_ret integer, 
  id_workplace_ret integer, 
  code_shop_ret integer, 
  rro_list character varying(1000), 
  date_open timestamp without time zone, 
  number_z_report integer, 
  code_order_source integer 
)
WITH (
  OIDS=TRUE
);
...
Рейтинг: 0 / 0
22.01.2017, 15:47
    #39389077
Cola
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать количество входящих позиций из присоединенной таблицы для каждой сроки
ora601,
попробую анализ сделать двумя способами
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Посчитать количество входящих позиций из присоединенной таблицы для каждой сроки / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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