2016-08-02 14 views
-2

Wie kann man zwei Tabellen mit Gruppenwerten verbinden?Wie kann man zwei Tabellen mit Gruppenwerten verbinden?

Meine Frage:

SELECT 
    employee.employee_name, 
    count(employee.employee_name) as count, 
    sum(table1.position)  as totalshares 
FROM 
    erom_kmch.table1 
LEFT OUTER JOIN 
    erom.employee 
     ON  employee.bene_type_table1=table1.bene_type  
     AND employee.bene_stype_table1=table1.bene_stype 
WHERE 
    table1.date = '2016-04-15' 
group by 
    employee.employee_name 
UNION 
SELECT 
    employee.employee_name, 
    count(employee.employee_name) as count, 
    sum(table2.shares) as totalshares  
FROM 
    erom_kmch.table2 
LEFT OUTER JOIN 
    erom.employee  
     ON employee.type_table2=table2.type  
     AND employee.bo_substat_table2=table2.bo_substat 
WHERE 
    table2.date = '2016-04-15' 
group by 
    employee.employee_name 

Returns:

employee_name   count totalshares 
    NULL     0 0  21967 
    Clearing Member  9 9  1386 
    devloper-php   4 4  1984 
    devloper-.net  46 46  410713 
    devloper-.android 2 
    NULL  4056461  0  117154 
    devloper-.C#php  2 5  31618309 
    devloper-.net  
    Resident Individual 939 25 361020 22762 

Aber ich brauche die Ausgabe wie folgt aus:

employee_name   count  totalshares 
      NULL    0  139121 
     Clearing Member  15  5355 
     devloper-php   9  2293 
     devloper-.net  46  433475 
     devloper-.android  2  4056461 
     devloper-.C#   2  31618 
     Resident Individual 3668  2662925 
     Individual- Director  1  100 

Ich trete und Union zwei Tabellen und ich zu einer Gruppe benötigen die Werte von zwei Tabellen. Ich bekomme zwei Ausgaben, ich brauche die Summe und die Anzahl von zwei Tabellen als eine Ausgabe.

+0

Setzen Sie es in eine Unterabfrage, und summieren Sie in der äußeren Abfrage – HoneyBadger

+0

Übrigens, ich weiß, mysql erlaubt es, aber Sie sollten alle Attribute, die nicht in einer Aggregatfunktion in der 'Gruppe von', nicht auf die andere Weise um – HoneyBadger

+0

zeigen Sie Ihre Original-Tabelle – jonju

Antwort

0

sollten Sie Subquery verwenden:

SELECT 
     [YourField] 
    , [YourAggregate] 
FROM 
    (SELECT 
      table1.holder 
     , table1.bene_type 
     , table1.bene_stype 
     , employee.employee_name 
     , COUNT(employee.employee_name) AS [count] 
     , SUM(table1.position) AS totalshares 
    FROM 
     erom_kmch.table1 
      LEFT OUTER JOIN 
     erom.employee 
      ON employee.bene_type_table1=table1.bene_type AND employee.bene_stype_table1=table1.bene_stype 
    WHERE 
     table1.date = '2016-04-15' 
    GROUP BY 
     employee.employee_name 
    UNION 
    SELECT 
     table2.cust_name 
     , table2.type 
     , table2.bo_substat 
     , employee.employee_name 
     , COUNT(employee.employee_name) as [count] 
     , SUM(table2.shares) as totalshares 
    FROM 
     erom_kmch.table2 
      LEFT OUTER JOIN 
     erom.employee 
      ON employee.type_table2=table2.type AND employee.bo_substat_table2=table2.bo_substat 
    WHERE 
     table2.date = '2016-04-15' 
    GROUP BY employee.employee_name 
    ) AS A 
GROUP BY 
    [YourField] 

HINWEIS: Sie sollten auch die Abfrage leicht zu lesen ist.

+0

Durch das Aussehen seiner Ausgabe. Ich denke nicht, dass es notwendig ist, alle Spalten auszuwählen – jonju

+0

Sie bearbeitet, nachdem ich die Antwort gemacht habe. Will edit now .. –

+0

Sieht aus wie er/sie hat harte Zeit editieren & formatieren seine/ihre Frage – jonju

Verwandte Themen