2012-10-31 2 views
10

http://sqlfiddle.com/#!2/6a6b1MYSQL Abfrage - Summen für Monat bekommen

Das Schema oben .. alles, was ich tun möchte gegeben wird, um die Ergebnisse als insgesamt Umsatz/Monat zu bekommen ... der Benutzer ein Startdatum und Enddatum eingeben und ich kann (in php) den ganzen Monat und die Jahre für diese Daten generieren. Wenn ich zum Beispiel die Gesamtzahl der "Verkäufe" für 12 Monate wissen möchte, weiß ich, dass ich 12 individuelle Abfragen mit Start- und Enddatum ausführen kann ... aber ich möchte nur eine Abfrage ausführen, bei der das Ergebnis wie folgt aussieht:

Month  numofsale 
January - 2 
Feb-1 
March - 23 
Apr - 10 

so weiter ..

oder nur eine Liste der Verkäufe mit den Monaten heraus, dass ich es in der pHP-generierten ... alle Ideen auf das Array von Monaten dann paaren kann ....

Bearbeiten/Schema und Daten eingefügt von sqlfiddle.com:

CREATE TABLE IF NOT EXISTS `lead_activity2` (
    `lead_activity_id` int(11) NOT NULL AUTO_INCREMENT, 
    `sp_id` int(11) NOT NULL, 
    `act_date` datetime NOT NULL, 
    `act_name` varchar(255) NOT NULL, 
    PRIMARY KEY (`lead_activity_id`), 
    KEY `act_date` (`act_date`), 
    KEY `act_name` (`act_name`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ; 

INSERT INTO `lead_activity2` (`lead_activity_id`, `sp_id`, `act_date`, `act_name`) VALUES 
(1, 5, '2012-10-16 16:05:29', 'sale'), 
(2, 5, '2012-10-16 16:05:29', 'search'), 
(3, 5, '2012-10-16 16:05:29', 'sale'), 
(4, 5, '2012-10-17 16:05:29', 'DNC'), 
(5, 5, '2012-10-17 16:05:29', 'sale'), 
(6, 5, '2012-09-16 16:05:30', 'SCB'), 
(7, 5, '2012-09-16 16:05:30', 'sale'), 
(8, 5, '2012-08-16 16:05:30', 'sale'), 
(9, 5,'2012-08-16 16:05:30', 'sale'), 
(10, 5, '2012-07-16 16:05:30', 'sale'); 
+0

Ich sehe Tabellen erstellen und Dummy-Datencode einfügen, was haben Sie für die 'Select' Anweisung versucht? – cctan

Antwort

22
SELECT DATE_FORMAT(date, "%m-%Y") AS Month, SUM(numofsale) 
FROM <table_name> 
WHERE <where-cond> 
GROUP BY DATE_FORMAT(date, "%m-%Y") 

Check in Ihrer Geige Demo folgende funktioniert es für mich (entfernen where Klausel für die Prüfung)

SELECT DATE_FORMAT(act_date, "%m-%Y") AS Month, COUNT(*) 
FROM lead_activity2 
WHERE <where-cond-here> AND act_name='sale' 
GROUP BY DATE_FORMAT(act_date, "%m-%Y") 

Der Rückgabe folgendes Ergebnis

MONTH COUNT(*) 
07-2012 1 
08-2012 2 
09-2012 1 
10-2012 3 
+0

Sie können 'DATE_FORMAT (act_date,"% M-% Y ")' für 'Juli-2012' verwenden. Ref: - http://dev.mysql.com/doc/refman/5.5/en/date-and-time -functions.html # function_date-Format – Salil

+2

Es wird nicht die Monate im Ergebnis anzuzeigen, in dem Umsatz Zahl Null sind – ursuleacv

0

Diese Abfrage -

SELECT 
    MONTH(act_date) month, COUNT(*) 
FROM 
    lead_activity2 
WHERE 
    YEAR(act_date) = 2012 AND act_name = 'sale' 
GROUP BY 
    month 

Überprüfen Sie die WHERE-Bedingung, wenn es für Sie in Ordnung ist - act_name = 'sale'.

Wenn Sie ausgeben Monatsnamen wollen, dann verwenden MONTH() Funktion statt MONAT().

+0

gut ich müde dieser SELECT EXTRACT (MONAT VON ACT_DATE) als Monat, EXTRACT (JAHR AB ACT_DATE) als Jahr COUNT (*) FROM lead_activity2 WHERE act_name = "Verkauf" GROUP BY Monat, Jahr ORDER BY Jahr DESC, Monat DESC –

+0

dev Abfrage funktioniert .... aber Ich denke, dass die Lösung, die ich gepostet habe, eine vollständigere Lösung war, da es so aussieht, als ob sie die Sortierung erledigt hätte –

0
SELECT YEAR(act_date), MONTH(act_date), COUNT(*) 

FROM lead_activity2 

GROUP BY YEAR(act_date), MONTH(act_date) 

Um Daten nach Monat oder andere Daten basierend auf Spalte zu erhalten, müssen Sie GROUP BY hinzufügen.

Sie können GROUP BY viele Spalten oder berechnete Werte hinzufügen.

Ich nehme an, dass "Anzahl der Verkäufe" die Anzahl der Zeilen bedeutet.

1

Sie können Abfrage versuchen, wie nachfolgend beschrieben

select SUM(`SP_ID`) AS `Total` , DATE_FORMAT(act_date, "%M") AS Month, Month(`ACT_DATE`) AS `Month_number` from `lead_activity2` WHERE `ACT_DATE` BETWEEN '2012-05-01' AND '2012-12-17' group by Month(`ACT_DATE`) 

Hier 2012-05-01 und 2012-12-17 sind Datumseingabe von Form. und es wird Ihnen die Summe der Verkäufe für einen bestimmten Monat zurückgeben, wenn sie in der Datenbank vorhanden sind.

dank

0

Manchmal werden Sie vielleicht die Monatsnamen wie Jan wollen, Feb, Mar .... Dez möglicherweise für ein Diagramm wie FusionChart

SELECT DATE_FORMAT(date, "%M") AS Month, SUM(numofsale) 
FROM <Table_name> 
GROUP BY DATE_FORMAT(date, "%M") 

Ergebnisse wie diese auf dem Tisch aussehen würde

MONTH COUNT(*) 
Jul  1 
Aug  2 
SEP  1 
OCT  3