Ich habe folgendes Schema beitreten: http://sqlfiddle.com/#!9/bd3a4/1 Ich würde nach Datum Gruppe mögen() und füge wo user_id = .. pro Tag und die Ergebnisse pro Tag zählen?. Ergebnis Day erforderlich | TotalRequests | Gesamtaufträgewie nach Datum mehr mysql Gruppe verlassen
Antwort
Da Sie einen Auftrag an Tag 1, und eine Anfrage an Tag 8 haben könnten, können Sie Einträge auf einer Seite aber nicht der andere. Um Ihre Bedürfnisse zu qualifizieren, würde ich eine UNION aller Bestellungen und Anfragen individuell nach Datum vornehmen. Dann roll diese Werte hoch. Bei der Abfrage des Ergebnisses der inneren Präaggregation wird die WHERE-Klausel pro Benutzer angewendet. Die Pre-Aggregate-Abfrage enthält außerdem eine recSource-Spalte, die angibt, woher der Datensatz stammt, als "O" von Bestellungen und "R" von Anfragen, sodass der Roll-up weiß, in welcher Spalte die Gesamtzahl gespeichert werden soll.
select
preAgg.recDate,
SUM(case when preAgg.recSource = 'O' then preAgg.recCount else 0 end) as OrderCount,
SUM(case when preAgg.recSource = 'R' then preAgg.recCount else 0 end) as RequestCount
from
(select
date(o.created_at) recDate,
'O' as recSource,
count(*) as recCount
from
orders o
where
o.user_id = 3
group by
date(o.created_at)
UNION ALL
select
date(r.created_at) recDate,
'R' as recSource,
count(*) as recCount
from
requests r
where
r.user_id = 3
group by
date(r.created_at)) preAgg
group by
preAgg.recDate
order by
preAgg.recDate
Für die Abfrageoptimierung, würde ich Ihre Bestellung und Anforderungstabelle sicherzustellen, haben beide einen Index auf (user_id, created_at).
das ist großartig, wusste nicht, diese Technik, wie würde ich hinzufügen, sagen wir provisions_tabelle und SUM (provisions.amount) per Datum(), in diesem Fall werden wir nicht in der Lage sein, UNION zu verwenden. – dflow
@ dflow, gleichen Prozess, fügen Sie einfach eine zusätzliche ... "UNION ALL", aber haben die gleiche Spalte/Summe/Gruppe nach Kontext. Legen Sie die recSource für "C" (nur als Beispiel) auf "C" fest. und ändern Sie von COUNT (*) zu SUM (commission.Amount) als recCount, damit es den äußeren Abfrageerwartungswerten entspricht. Und dann fügen Sie einen endgültigen SUM (Fall/wann) für die Kommission recSource value = "C" – DRapp
groß, eine weitere Sache die Kommission. Der Betrag ist von dezimaler Art, so dass alle Ergebnisse im Dezimalformat zurückgegeben werden, so zählt es 84,00 usw., Wie kann ich das Ergebnisspaltenformat einstellen? – dflow
können Sie die folgende Abfrage verwenden:
SELECT
DATE(o.created_at) AS Day
,COUNT(r.id) AS TotalRequests
,COUNT(o.id) AS TotalOrders
FROM orders o
LEFT JOIN
requests r ON
r.id = o.request_id
WHERE o.user_id = 3
GROUP BY DATE(r.created_at), DATE(o.created_at),o.user_id
Danke für die Geige. Aber fügen Sie auch alle notwendigen Informationen in die Frage ein. Links brechen, besonders SQLFiddle. Und wir wollen, dass Beiträge für zukünftige Besucher nützlich sind. –