2 Abfragen zusammenfassen

Hi,

ich habe zwei funktionierende Abfragen die ich gern zu einer performanten Abfrage zusammenfassen würde. Also zwei Abfragen mit je 3 Spalten zu einer Abfrage mit 5 Spalten da Spalte 1 identisch ist. Die ersta Abfrage liefert eine Anzahl je Tag und die zweite Anzahl die Summe der Woche zum ausgewählten Tag.

SQL:
SELECT DISTINCT t.user29, COUNT(t.tnumber) AS Anzahl1, FORMAT(COUNT(t.tnumber)/ (SELECT COUNT(t.tnumber) FROM crmdb.tickets t WHERE t.user22 = 'Planung/Bewirtschaftung' AND t.tnumber LIKE 'HL-%' AND (from_unixtime(t.createtime, '%Y-%m-%d')) = '2019-11-14')*100, 0)AS Anteil1
FROM crmdb.tickets t 
WHERE t.user22 = 'Planung/Bewirtschaftung' 
AND t.tnumber LIKE 'HL-%' 
AND from_unixtime(t.createtime, '%Y-%m-%d') = '2019-11-14' 
GROUP BY t.user29 WITH ROLLUP
;
und:
SQL:
SELECT DISTINCT t.user29, COUNT(t.tnumber) AS Anzahl2, FORMAT(COUNT(t.tnumber)/ (SELECT COUNT(t.tnumber) FROM crmdb.tickets t WHERE t.user22 = 'Planung/Bewirtschaftung' AND t.tnumber LIKE 'HL-%' AND (from_unixtime(t.createtime, '%u') = 46) AND (from_unixtime(t.createtime, '%Y')) = 2019)*100, 0) AS Anteil2 
FROM crmdb.tickets t 
WHERE t.user22 = 'Planung/Bewirtschaftung'
AND t.tnumber LIKE 'HL-%'
AND from_unixtime(t.createtime, '%u') = 46
AND from_unixtime(t.createtime, '%Y') = 2019
GROUP BY t.user29 WITH ROLLUP
;
wer kann mir helfen ??

Grüße
 
Ich habe einen Lösungsweg gefunden:
SQL:
SELECT DISTINCT t.user29, IFNULL(e.Anzahl1, 0), IFNULL(e.Anteil1, 0), IFNULL(d.Anzahl2, 0), IFNULL(d.Anteil2, 0)
FROM crmdb.tickets t 
LEFT JOIN (SELECT DISTINCT t.user29, COUNT(t.id) AS Anzahl1, FORMAT(COUNT(t.id)/ (SELECT COUNT(t.id) FROM crmdb.tickets t WHERE t.user22 = 'Planung/Bewirtschaftung' AND t.tnumber LIKE 'HL-%' AND (from_unixtime(t.createtime, '%Y-%m-%d')) = '2019-11-11')*100, 0)AS Anteil1
FROM crmdb.tickets t 
WHERE t.user22 = 'Planung/Bewirtschaftung' 
AND t.tnumber LIKE 'HL-%' 
AND from_unixtime(t.createtime, '%Y-%m-%d') = '2019-11-11' 
GROUP BY t.user29) e ON e.user29 = t.user29
right JOIN (SELECT DISTINCT t.user29, COUNT(t.id) AS Anzahl2, FORMAT(COUNT(t.id)/ (SELECT COUNT(t.id) FROM crmdb.tickets t WHERE t.user22 = 'Planung/Bewirtschaftung' AND t.tnumber LIKE 'HL-%' AND (from_unixtime(t.createtime, '%u') = 46) AND (from_unixtime(t.createtime, '%Y')) = 2019)*100, 0) AS Anteil2 
FROM crmdb.tickets t 
WHERE t.user22 = 'Planung/Bewirtschaftung'
AND t.tnumber LIKE 'HL-%'
AND from_unixtime(t.createtime, '%u') = 46
AND from_unixtime(t.createtime, '%Y') = 2019
GROUP BY t.user29) d ON d.user29 =t.user29
GROUP BY t.user29
;
jetzt habe ich nur das Problem "WITH ROLLUP" richtig zu setzen, damit ich unter jeder Spalte eine Summe bekomme. Wie kann ich das erreichen?
 
Nur mal so als grundsätzliche Überlegung:

Du hattest hier ja schon häufiger ähnliche Anfragen. Es scheint immer um das Thema Reporting für dieselben Tabellen zu gehen. Die Abfragen werden teilweise recht umständlich, Performanceprobleme spielen eine Rolle und die fehlende Möglichkeit, die Datenbank anzupassen oder Indizes zu erstellen, schränkt dich zusätzlich ein.

Vielleicht solltest du in Erwägung ziehen, die Daten einfach in ein Data Warehouse zu überführen und das Reporting dort zu machen. Wahrscheinlich könntest du deine Probleme dadurch grundsätzlich lösen, anstatt immer wieder neu herum zu frickeln.
 
das ist sicher eine gute Alternative, da müsste ich mich aber auch erst noch einarbeiten

mir geht es hier aber auch um das erlernen des grundsätzlichen "Handwerks", da ich nicht regelmäßig daran arbeite fehlt mir die Routine
 
mir geht es hier aber auch um das erlernen des grundsätzlichen "Handwerks"
Dann wäre es vielleicht nicht schlecht, diesem Vorschlag aus einem deiner anderen Threads zu folgen:
Oder der TO bastelt schnell ein sqlFiddle aus seinen Tabellen. Dann wird es für uns auch viel leichter.
Wenn du dort ein aussagekräftiges Beispiel mit ein paar Testdaten aufbaust und hier verlinkst, steigerst du die Bereitschaft hier zu antworten erheblich.
 
SQL:
SELECT Bereiche, sum(AnzahlTag) AS AnzahlTag, sum(AnteilTag) AS AnteilTAg, sum(AnzahlWoche) AS AnzahlWoche, sum(AnteilWoche) AS AnteilWoche
FROM (
SELECT t.user29 AS Bereiche, (IFNULL(e.Anzahl1, 0)) AS AnzahlTag, (IFNULL(e.Anteil1, 0)) AS AnteilTag, (IFNULL(d.Anzahl2, 0)) AS AnzahlWoche, (IFNULL(d.Anteil2, 0)) AS AnteilWoche
FROM tickets t 
  LEFT JOIN (SELECT DISTINCT t.user29, COUNT(t.tnumber) AS Anzahl1, FORMAT(COUNT(t.tnumber)/ (SELECT COUNT(t.tnumber) FROM tickets t WHERE t.user22 = 'Planung' AND t.tnumber LIKE 'HL-%' AND createtime = '2019-11-14')*100, 0)AS Anteil1
    FROM tickets t 
    WHERE t.user22 = 'Planung' 
      AND t.tnumber LIKE 'HL-%' 
      AND createtime = '2019-11-14' 
    GROUP BY t.user29) e ON e.user29 = t.user29
  right JOIN (SELECT DISTINCT t.user29, COUNT(t.tnumber) AS Anzahl2, FORMAT(COUNT(t.tnumber)/ (SELECT COUNT(t.tnumber) FROM tickets t WHERE t.user22 = 'Planung' AND t.tnumber LIKE 'HL-%' AND WEEKOFYEAR(t.createtime) = 46 AND YEAR(t.createtime) = 2019)*100, 0) AS Anteil2 
    FROM tickets t 
    WHERE t.user22 = 'Planung'
    AND t.tnumber LIKE 'HL-%'
    AND WEEKOFYEAR(t.createtime) = 46
    AND YEAR(t.createtime) = 2019
    GROUP BY user29) d ON d.user29 = t.user29
GROUP BY t.user29
) x GROUP BY Bereiche WITH ROLLUP
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben