2012-10-31 152 views
10

http://sqlfiddle.com/#!2/6a6b1MySQL查詢 - 每月獲得總計

以上..所有我想要做的就是得到的結果爲總銷售額的/月的方案給出......用戶將輸入開始日期和結束日期我可以生成(在PHP中)這些日期的所有月份和年份。例如,如果我想知道12個月的「銷售」總數,我知道我可以運行12個人查詢的開始和結束日期......但我只想運行一個查詢,其結果看起來像

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

等..

或只是一個銷售與出幾個月裏,我可以將其配對在PHP ...任何想法產生個月的數組列表....

從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

我看到了創建表和插入虛擬數據代碼,你對'select'語句嘗試了什麼? – cctan

回答

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

檢查你的提琴演示以下工作對我來說(除去用於測試where條款)

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") 

返回以下結果

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

您可以使用'DATE_FORMAT(act_date,「%M-%Y」)'作爲'July-2012'參考: - http://dev.mysql.com/doc/refman/5.5/zh-CN/date-and-time -functions.html#function_date格式 – Salil

+2

它不會在結果顯示的月份裏銷售數量爲零 – ursuleacv

0

嘗試此查詢 -

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

檢查哪裏條件是否合適 - act_name = 'sale'

如果你想輸出月份名稱,然後用MONTHNAME()函數,而不是MONTH()

+0

以及我厭倦了這種SELECT 提取物(一個月act_date)爲一個月, 提取物(一年act_date)截至今年, COUNT(*)FROM lead_activity2 WHERE _名稱= 「買賣」 GROUP BY 月, 年 ORDER BY 年DESC, 月DESC –

+0

開發你的查詢工作....但我想我發佈的解決方案是一個更完整的,因爲它似乎一直在做排序和東西.....將選擇你的 –

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

FROM lead_activity2 

GROUP BY YEAR(act_date), MONTH(act_date) 

要按月獲取數據或基於列的任何其他數據,您必須添加GROUP BY。

您可以將許多列或計算值添加到GROUP BY。

我假設「銷售量」是指行數。

1

從以下表格

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`) 

這裏2012-05-012012-12-17給出的日期輸入您可以嘗試查詢。如果存在於數據庫中,它將返回您特定月份的銷售總額。

感謝

0

有時你可能想要月份名稱爲一月,二月,三月....月可能像FusionChart

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

結果應該是這樣的表

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