powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Посчитать количество входящих позиций из присоединенной таблицы для каждой сроки
7 сообщений из 7, страница 1 из 1
Посчитать количество входящих позиций из присоединенной таблицы для каждой сроки
    #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
Посчитать количество входящих позиций из присоединенной таблицы для каждой сроки
    #39388828
Alexius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cola,

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

Запрос выполняется уже 9 часов .
Есть какой-то другой способ?
...
Рейтинг: 0 / 0
Посчитать количество входящих позиций из присоединенной таблицы для каждой сроки
    #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
Посчитать количество входящих позиций из присоединенной таблицы для каждой сроки
    #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
Посчитать количество входящих позиций из присоединенной таблицы для каждой сроки
    #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
Посчитать количество входящих позиций из присоединенной таблицы для каждой сроки
    #39389077
Фотография Cola
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ora601,
попробую анализ сделать двумя способами
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Посчитать количество входящих позиций из присоединенной таблицы для каждой сроки
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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