Проблема с консультацией сложным PostgreSQL

Пожалуйста я нуждаюсь в помощи с консультацией в PostgreSQL

Консультация - следующая:

SELECT
DISTINCT("ventas"."Product Category") AS "Categoria de Producto",
(EXTRACT(MONTH FROM "ventas"."Order Date")) AS "Mes",
"ventas"."region" AS "Región",
"ventas"."Customer Segment" AS "Segmento de Clientes",
COUNT (*) AS "Cantidad de Ventas"
FROM "ventas"
WHERE  
((EXTRACT(MONTH FROM "ventas"."Order Date"))='4') 
AND
"ventas"."region"='West'
AND
"ventas"."Customer Segment"='Corporate'
GROUP BY
"ventas"."Product Category",
"ventas"."Order Date",
"ventas"."region",
"ventas"."Customer Segment"
ORDER BY
("ventas"."Product Category");

Эта консультация возвращает мне следующий результат:

Categoria de Producto|Mes|Region|Segmento de Clientes|Cantidad de Ventas
Furniture            |4  |West  |Corporate           |1
Furniture            |4  |West  |Corporate           |2
Office Supplies      |4  |West  |Corporate           |1
Office Supplies      |4  |West  |Corporate           |2
Office Supplies      |4  |West  |Corporate           |4
Technology           |4  |West  |Corporate           |1

Результат, который я ищу, - следующий:

Categoria de Producto|Mes|Region|Segmento de Clientes|Cantidad de Ventas
Furniture            |4  |West  |Corporate           |3    
Office Supplies      |4  |West  |Corporate           |7    
Technology           |4  |West  |Corporate           |1

Я думал, что используя keyword DISTINCT вместе с "Продукт Категори" он будет выбирать все категории продуктов, не удваивая линий, но не является таким результат.

0
задан 03.11.2017, 10:52
2 ответа

Главная проблема - что, в тебе GROUP BY, estÃ: s группируя в дату вместо в месяц. Чтобы это исправлять, просто замени

"ventas"."Order Date",

... из-за:

EXTRACT(MONTH FROM "ventas"."Order Date"),

También, ты можешь снимать DISTINCT в SELECT. Не имеет смысл помещать один DISTINCT, если уже estÃ: s используя один GROUP BY.

исправленная Консультация:

SELECT
"ventas"."Product Category" AS "Categoria de Producto", -- quita el DISTINCT
(EXTRACT(MONTH FROM "ventas"."Order Date")) AS "Mes",
"ventas"."region" AS "Región",
"ventas"."Customer Segment" AS "Segmento de Clientes",
COUNT (*) AS "Cantidad de Ventas"
FROM "ventas"
WHERE  
((EXTRACT(MONTH FROM "ventas"."Order Date"))='4') 
AND
"ventas"."region"='West'
AND
"ventas"."Customer Segment"='Corporate'
GROUP BY
"ventas"."Product Category",
EXTRACT(MONTH FROM "ventas"."Order Date"), -- esta es la clave
"ventas"."region",
"ventas"."Customer Segment"
ORDER BY
("ventas"."Product Category");
1
ответ дан 24.11.2019, 04:31
  • 1
    Funcionó совершенный!, как info добавочный, что мог бы дополнять ответ, ¿ Существует какая-то функция, с которой он мог бы обращать число месяца в слово? –  Medina Nualart Martin 03.11.2017, 15:54
  • 2
    Если, serí во что-то как TO_CHAR("ventas"."Order Date", 'MONTH'). Ты можешь находить все выборы aquí: postgresql.org/docs/current/static/functions-formatting.html –  sstan 03.11.2017, 16:34

Если не я equivovo этот subselect должен возвращать то, в чем ты нуждаешься.

Ты Относишься к полученным данным и складываешь колонну Cantidad de Ventas, не группируя ее.

SELECT
"Categoria de Producto",
"Mes",
"Región",
"Segmento de Clientes",
SUM("Cantidad de Ventas")
FROM

SELECT
DISTINCT("ventas"."Product Category") AS "Categoria de Producto",
(EXTRACT(MONTH FROM "ventas"."Order Date")) AS "Mes",
"ventas"."region" AS "Región",
"ventas"."Customer Segment" AS "Segmento de Clientes",
COUNT (*) AS "Cantidad de Ventas"
FROM "ventas"
WHERE  
((EXTRACT(MONTH FROM "ventas"."Order Date"))='4') 
AND
"ventas"."region"='West'
AND
"ventas"."Customer Segment"='Corporate'
GROUP BY
"ventas"."Product Category",
"ventas"."Order Date",
"ventas"."region",
"ventas"."Customer Segment"
ORDER BY
("ventas"."Product Category");

GROUP BY
"Categoria de Producto",
"Mes",
"Región",
"Segmento de Clientes"
0
ответ дан 24.11.2019, 04:31