sql >> Database teknologi >  >> RDS >> Mysql

MySQL-sammenføjningstabeller grupperes efter sumproblem

Du skal flade både D- og E-bordet. Så formoder jeg, at A og B blot er opslag for C, så der er ingen grund til at lave GROUP BY på A:http://www.sqlfiddle.com/#!2/fccf1/8

Jeg fjernede støjen (A og B), da jeg (endnu) ikke kan se, hvordan A og B er relateret til at opsummere informationen for C

Prøv dette:

SELECT C.Article, C.Text, COALESCE(D.ClicksSum,0) AS ClicksSum, COALESCE(D.ImpressionsSum,0) AS ImpressionsSum, COALESCE(E.ViewsSum,0) AS ViewsSum, COALESCE(E.VisitorsSum,0) AS VisitorsSum FROM C LEFT JOIN ( SELECT TableC, SUM(Clicks) AS ClicksSum, SUM(Impressions) AS ImpressionsSum FROM D GROUP BY TableC ) D ON C.ID=D.TableC LEFT JOIN ( SELECT TableC, SUM(Views) AS ViewsSum, SUM(Visitors) AS VisitorsSum FROM E GROUP BY TableC ) E ON C.ID=E.TableC

Output:

| ARTICLE | TEXT | CLICKSSUM | IMPRESSIONSSUM | VIEWSSUM | VISITORSSUM | ---------------------------------------------------------------------------------- | Type | Unicode Art | 23 | 8 | 23 | 8 | | Header | Spreadsheet | 15 | 10 | 32 | 21 | | Auto Align | Off | 0 | 0 | 0 | 0 |

Bemærk, at jeg ikke skrev disse skemaer i mit sqlfiddle-indlæg manuelt, jeg bruger sqlfiddles Tekst til DDL

Jeg elsker http://sqlfiddle.com , dens Tekst til DDL kan endda analysere data fra din ASCII-kunst ツ

Når du ser dit klarere mål (fra din kommentar), kan dette være det:http:/ /www.sqlfiddle.com/#!2/fccf1/13

SELECT A.Name, A.Description, COALESCE(SUM(D.ClicksSum),0) AS ClicksSum, COALESCE(SUM(D.ImpressionsSum),0) AS ImpressionsSum, COALESCE(SUM(E.ViewsSum),0) AS ViewsSum, COALESCE(SUM(E.VisitorsSum),0) AS VisitorsSum FROM C LEFT JOIN ( SELECT TableC, SUM(Clicks) AS ClicksSum, SUM(Impressions) AS ImpressionsSum FROM D GROUP BY TableC ) D ON C.ID=D.TableC LEFT JOIN ( SELECT TableC, SUM(Views) AS ViewsSum, SUM(Visitors) AS VisitorsSum FROM E GROUP BY TableC ) E ON C.ID=E.TableC RIGHT JOIN B ON B.ID = C.TableB RIGHT JOIN A ON A.ID = B.TableA GROUP BY A.ID

Output:

| NAME | DESCRIPTION | CLICKSSUM | IMPRESSIONSSUM | VIEWSSUM | VISITORSSUM | ---------------------------------------------------------------------------------- | Type | Unicode Art | 38 | 18 | 55 | 29 | | Header | Spreadsheet | 0 | 0 | 0 | 0 | | Auto Align | Off | 0 | 0 | 0 | 0 |

Ovenstående tilgang kan stadig producere kartesiske produkter, flad underkategorien(B) ud, før den grupperes til kategori(A):http://www.sqlfiddle.com/#!2/fccf1/19

SELECT A.Name, A.Description, COALESCE(SUM(B.ClicksSum),0) AS ClicksSum, COALESCE(SUM(B.ImpressionsSum),0) AS ImpressionsSum, COALESCE(SUM(B.ViewsSum),0) AS ViewsSum, COALESCE(SUM(B.VisitorsSum),0) AS VisitorsSum FROM A LEFT JOIN ( SELECT B.ID, B.TableA, SUM(C.ClicksSum) AS ClicksSum, SUM(C.ImpressionsSum) AS ImpressionsSum, SUM(C.ViewsSum) AS ViewsSum, SUM(C.VisitorsSum) AS VisitorsSum FROM B LEFT JOIN ( SELECT C.TableB, D.ClicksSum, D.ImpressionsSum, E.ViewsSum, E.VisitorsSum FROM C LEFT JOIN ( SELECT TableC, SUM(Clicks) AS ClicksSum, SUM(Impressions) AS ImpressionsSum FROM D GROUP BY TableC ) D ON C.ID=D.TableC LEFT JOIN ( SELECT TableC, SUM(Views) AS ViewsSum, SUM(Visitors) AS VisitorsSum FROM E GROUP BY TableC ) E ON C.ID=E.TableC ) C ON C.TableB = B.ID GROUP BY B.ID ) B ON B.TableA = A.ID GROUP BY A.ID

Output:

| NAME | DESCRIPTION | CLICKSSUM | IMPRESSIONSSUM | VIEWSSUM | VISITORSSUM | ---------------------------------------------------------------------------------- | Type | Unicode Art | 38 | 18 | 55 | 29 | | Header | Spreadsheet | 0 | 0 | 0 | 0 | | Auto Align | Off | 0 | 0 | 0 | 0 |

  1. Kan du ikke bruge en LIKE-forespørgsel i en JDBC PreparedStatement?

  2. Forkert strengfejl ved tilføjelse af emoji til en database via en formular

  3. MySQL - Styr hvilken række der returneres af en gruppe af

  4. MySQL-lagret proceduremarkør til forberedte udsagn