2017-02-07 6 views
0

ich eine „total überschreiben“ zu bekommen versuche aber nur summieren, wenn der Agent = x, y oder zWie SUMIF eine Summe

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

Nicht verwandt, aber: 'distinct' ist ** NOT ** eine Funktion. 'distinct (a), b, c' ist das gleiche wie' distinct a, b, c' oder 'distinct a, b, (c)' –

+0

Danke, ich habe nur kopiert und eingefügt und habe die Klammern nicht entfernt Faulenzen –

Antwort

0

Wenn Sie beide Aggregate für alle Reihen haben wollen und einige für können Sie Verwenden Sie FILTER (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

Wie ich Ihre Anfrage verstanden Sie auf Summen summieren müssen nur im Falle ist Mittel x, y, z

Also entweder verschachtelte Abfrage:

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) 

Oder

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 

oder wenn Sie beide Agenten Paid haben, und überschreibt nur von Agenten

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 

Oder Sie können

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

Die 2. Anfrage funktioniert, aber ich denke, ich muss besser erklären, was ich will. Ich brauche nur den Override, um für die spezifischen Agenten "x, y, z" zu berechnen, aber ich brauche immer noch die "Bezahlte zu Agent" -Summen für alle anderen Agenten, a, b, c etc ... –