2017-02-07 13 views
0

Я пытаюсь получить «полное переопределение», но только сумму, если агент = х, у, гКак SumIf СУММЫ

SELECT 
    DISTINCT("public"."rdf_dean"."agent_name") AS "Agent", 
    SUM("public"."rdf_dean"."paidcomm" *.9) AS "Paid to Agent", 
    SUM("public"."rdf_dean"."paidcomm" *.1) AS "Overrides", 
    SUM overrides IF agent_name = x OR agent_name = y OR agent_name = z 

FROM  "public"."rdf_dean" 
WHERE "public"."rdf_dean"."created_date" = date(now()) 
GROUP BY agent_name 
+2

Несвязанный, но: 'отчетный' есть ** NOT ** a функция. 'distinct (a), b, c' - это то же самое, что и' different a, b, c' или 'distinct a, b, (c)' –

+0

Спасибо, я просто скопировал и вставил и не взял круглые скобки , ленивый –

ответ

0

Если вы хотите иметь как заполнители для всех строк и для некоторых вы можете использование ФИЛЬТР (https://www.postgresql.org/docs/9.4/static/sql-expressions.html):

SELECT 
    "public"."rdf_dean"."agent_name" AS "Agent", 
    SUM("public"."rdf_dean"."paidcomm" *.9) AS "Paid to Agent", 
    SUM("public"."rdf_dean"."paidcomm" *.1) AS "Overrides", 
    SUM("public"."rdf_dean"."paidcomm" *.1) 
     FILTER (WHERE agent_name = x OR agent_name = y OR agent_name = z) 
     AS "Partial Overrides", 
FROM  "public"."rdf_dean" 
WHERE "public"."rdf_dean"."created_date" = date(now()) 
GROUP BY agent_name 
0

Как я понял ваш запрос вам нужно подвести итог по итогам только в случае, если агент х, у, г

Так как вложенный запрос:

SELECT "Agent", sum("Overrides") 
FROM 
(
SELECT 
    "public"."rdf_dean"."agent_name" AS "Agent", 
    SUM("public"."rdf_dean"."paidcomm" *.9) AS "Paid to Agent", 
    SUM("public"."rdf_dean"."paidcomm" *.1) AS "Overrides" 
FROM  "public"."rdf_dean" 
WHERE "public"."rdf_dean"."created_date" = date(now()) 
GROUP BY agent_name 
) as data 
WHERE 
data."Agent" in (x, y, z) 

Или

SELECT 
    "public"."rdf_dean"."agent_name" AS "Agent", 
    SUM("public"."rdf_dean"."paidcomm" *.9) AS "Paid to Agent", 
    SUM("public"."rdf_dean"."paidcomm" *.1) AS "Overrides" 
FROM  "public"."rdf_dean" 
WHERE "public"."rdf_dean"."created_date" = date(now()) 
AND "public".rdf_dean.agent_name in (x, y, z) 
GROUP BY agent_name 

Или, если вам нужно иметь оба, Пайде Агенту и переопределяет только агентами

SELECT 
    "public"."rdf_dean"."agent_name" AS "Agent", 
    SUM("public"."rdf_dean"."paidcomm" *.9) AS "Paid to Agent", 
    SUM("public"."rdf_dean"."paidcomm" *.1) AS "Overrides", 
    (SELECT SUM("public"."rdf_dean"."paidcomm" *.1) 
     FROM "public"."rdf_dean" internal 
     WHERE 
     internal.agent_name = out.agent_name 
     AND 
     internal.agent_name in (x, y, z) ) AS "OverridesXYZ" 
FROM  "public"."rdf_dean" out 
WHERE "public"."rdf_dean"."created_date" = date(now()) 
GROUP BY agent_name 

Или вы можете

SELECT 
    "public"."rdf_dean"."agent_name" AS "Agent", 
    SUM("public"."rdf_dean"."paidcomm" *.9) AS "Paid to Agent", 
    SUM("public"."rdf_dean"."paidcomm" *.1) AS "Overrides", 
    SUM(internal.paidcomm * .1) AS "OverridesXYZ" 
FROM  "public"."rdf_dean" out 
LEFT JOIN public.rdf_dean internal ON internal.agent_name = out.agent_name AND internal.agent_name in (x, y, z) 
WHERE "public"."rdf_dean"."created_date" = date(now()) 
GROUP BY agent_name 
+0

Второй запрос работал, однако я думаю, что мне нужно лучше объяснить, что я хочу. Мне нужно только переопределение для вычислений для конкретных агентов «x, y, z», однако мне все еще нужны суммы «Paid to Agent» для отображения всех других агентов: a, b, c и т. Д. –