2017-02-07 5 views
0

Je suis en train d'obtenir une « dérogation totale », mais seulement la somme si l'agent = x, y ou zComment sumIf une somme

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

Non lié, mais: 'distinct' est ** NON ** une fonction. 'distinct (a), b, c' est le même que' distinct a, b, c' ou 'distinct a, b, (c)' –

+0

Merci, je viens de copier et coller et je n'ai pas sorti la parenthèse , étant paresseux –

Répondre

0

Si vous voulez avoir les deux agrégats pour toutes les lignes et pour certains que vous pouvez utiliser FILTRE (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

Comme je l'ai bien compris votre demande, vous devez résumer sur les totaux seulement dans l'agent est le cas x, y, z

donc, soit requête imbriquée:

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) 

Ou

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 

Ou si vous avez besoin d'avoir les deux, payé à l'agent et remplace uniquement par des agents

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 

Ou vous pouvez

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

La 2ème requête a fonctionné, cependant je pense que je dois expliquer mieux ce que je veux. J'ai seulement besoin de l'Override pour calculer les agents spécifiques "x, y, z" mais j'ai toujours besoin des sommes "Paid to Agent" pour tous les autres agents, a, b, c etc ... –