2017-11-17 1 views
-1

Produkte Verkauft TabelleMySql - Wie erhalten Sie durchschnittliche Daten aus zwei Tabellen?

Hält Aufzeichnungen eines jeden einzelnen Artikel als Auftrag gekauft wurden, können viele Produkte haben.

+----+------------+---------+----------+-------+ 
| ID | PAYMENT_ID | PROD_ID | STORE_ID | PRICE | 
+----+------------+---------+----------+-------+ 
| 1 |   1 |  5 |  4 | 3.00 | 
| 2 |   1 |  4 |  4 | 4.00 | 
| 3 |   2 |  3 |  7 | 5.00 | 
| 4 |   3 |  8 |  9 | 10.00 | 
+----+------------+---------+----------+-------+ 

Zahlung Tabelle

Hält Aufzeichnungen über die Zahlung für den Auftrag.

+----+-------+------------+----------+ 
| ID | TOTAL | DATE | STORE_ID | 
+----+-------+------------+----------+ 
| 1 | 7.00 | 10/10/2010 |  4 | 
| 2 | 5.00 | 01/07/2011 |  7 | 
| 3 | 10.00 | 20/02/2012 |  9 | 
+----+-------+------------+----------+ 

Wie ich Abfrage oder eine Funktion erstellen kann, die mir geben würden, wie viele Verkäufe jeden Monat gemacht wurden (Januar bis Dezember) im Durchschnitt in den Jahren 2010/2011/2012 für einen bestimmten Laden.

Zum Beispiel, wenn „Store 4“ verkauft 5 Produkte im Januar 2010, im Jahr 2011 und im Jahr 2012 dann die durchschnittlichen Verkäufe für dieses Geschäft in dem Monat Januar wären 5.

Ich habe versucht:

SELECT storeid, paymentdate 
FROM payment_table 
WHERE (YEAR(paymentdate)=2010 OR YEAR(paymentdate)=2011 OR YEAR(paymentdate)=2012) 
    AND (storeid=1) 

Dies tut nicht viel abgesehen von den Daten aller Zahlungen für ein bestimmtes Geschäft zu bekommen.

+0

Was haben Sie bisher versucht? –

+0

@ stephen.vakil 'SELECT storeid, Zahlungsdatum FROM payment_table WHERE (JAHR (Zahlungsdatum) = 2010 ODER JAHR (Zahlungsdatum) = 2011 ODER JAHR (Zahlungsdatum) = 2012) AND (storeid = 1)' Das macht nicht viel anderes Erhalten Sie die Daten aller Zahlungen für ein bestimmtes Geschäft. – HoldTight

+0

Verknüpfen Sie die Tabellen und verwenden Sie dann COUNT (*) und GROUP BY YEAR (Datum), MONTH (Date), um die Zählungen für jeden Monat zu erhalten. Setze das in eine Unterabfrage und benutze 'AVG (count)' und 'GROUP BY month' – Barmar

Antwort

1

Sie müssen den Tabellen beitreten, um die Verkaufszahlen für jeden Zeitraum zu erhalten. Setzen Sie das in eine Unterabfrage, damit Sie es nach Monat neu gruppieren können.

SELECT month, AVG(sales) AS avg_sales 
FROM (SELECT MONTH(paymentdate) AS month, YEAR(paymentdate) AS year, COUNT(*) AS sales 
     FROM payment_table AS pay 
     JOIN products_sold_table AS prod ON pay.id = prod.payment_id AND pay.store_id = prod.store_id 
     WHERE YEAR(paymentdate) IN (2010, 2011, 2012) AND pay.store_id = 1 
     GROUP BY month, year 
) AS x 
GROUP BY month 
+0

Könnten Sie bitte die Antwort so bearbeiten, dass sie die Daten für ein bestimmtes Geschäft zurückgibt, die ich angegeben habe, da es mehr als ein Geschäft gibt. Und ich sehe, dass Sie "COUNT (*) AS sales" haben; Wie kann dies durch die Summe der verkauften Produkte und nicht durch die Summe ihres Preises ersetzt werden? – HoldTight

+0

Es ist nicht die Summe seiner Preise, es ist nur die Anzahl der Zeilen in den verbundenen Tabellen. – Barmar

+0

Summe der Preise wäre 'SUM (Preis)' – Barmar

Verwandte Themen