2014-09-04 105 views
1

我正在生成一份銷售報告,並且在查詢時遇到困難。我不擅長查詢。我希望你能幫助我。好吧,在這裏。如何使用sql查詢每月過濾總銷售記錄?

我有一個銷售表。其結構是這樣的 EX:

product_id  name    date_purchased 
1    apple   2014-01-03 12:00:59 
2    orange   2014-01-05 10:12:20 
3    banana   2014-02-01 09:25:01 
4    mango   2014-02-20 18:13:25 
5    stawberry  2014-02-28 13:14:30 
6    jackfruit  2014-05-26 08:16:31 
7    grapes   2014-11-03 09:25:21 
8    guava   2014-12-25 10:15:45 

現在我想算的項目每月購買 我的輸出結果應該是這樣的

2,3,0,0,1,0, 0,0,0,0,1,1

2代表一月, 3代表二月, 等等

我的查詢看起來是這樣,但我知道這是不對的.. :(

SELECT COUNT(product_id) FROM sales_table GROUP BY date_purchased 

如何使用查詢來做到這一點?或者我應該爲此創建一個PHP函數?

回答

2

嘗試這樣的:

SELECT year(date_purchased), month(date_purchased), COUNT(product_id) 
FROM sales_table 
GROUP BY concat(year(date_purchased), month(date_purchased)) 
+0

好吧,我試了代碼,但它只返回1行 – Jerielle 2014-09-04 05:56:17

+0

您查詢的結果是這樣的:2014,8,24 – Jerielle 2014-09-04 05:57:32

+0

@Jerielle:與您的示例相同的數據? – Pascalz 2014-09-04 06:00:16

1

SQL查詢就夠了。 你必須使用group by。 但首先爲您的表格創建一個月份列。

create function byMonth(@myDate datetime) 
    returns datetime 
as 
    begin 
    declare @newDate 
    set @newDate = year(@myDate) + '/' + month(@myDate) + '/1 00:00:00' 
    return @newDate 
    end 
go 

,並在查詢中使用這樣的:

Select Count(*),byMonth(date_puchased) as x 
from myTable 
where ... 
group by x 
having ... 

這應該爲你工作。

+0

Aw查詢對我來說看起來很可怕.. :)所以首先我需要設置一個函數?以上功能的用途是什麼? – Jerielle 2014-09-04 05:55:46

+0

該函數用於生成銷售獨特月份的唯一列。 @帕斯卡爾茲的答案和我的最小代碼一樣。選擇其中之一。 – ConductedClever 2014-09-04 05:56:57

1

我想你可以檢索日期並使用PHP,因爲它非常簡單。

一旦你有個約會可以說,例如,

$date_str = "2014-01-03 12:00:59"; //let's say you fetch this from DB 
$month = date('m',strtotime($date_str)); //this will automatically output 1 

你所提到的,2代表一月,3代表二月等等,所以你可以只加1,$月份,你有你所需要的。

+0

好的,謝謝你的想法。我會嘗試 – Jerielle 2014-09-04 05:24:18

+0

在SQL中計算速度更快。 – ConductedClever 2014-09-04 05:34:58

1

希望它應該工作

SELECT COUNT(product_id) FROM sales_table GROUP BY DATENAME(month, date_purchased) 
1

更多闡述解決方案

要獲得月 - 明智

SELECT COUNT(id) FROM testrec GROUP BY DATE_FORMAT(pur,'%M'); 

獲取所有細節

SELECT COUNT(product_id),`name` , date_purchased, DATE_FORMAT(date_purchased,'%M') FROM sales_table GROUP BY DATE_FORMAT(pur,'%M'); 
+0

你正在檢索的月份。這還不夠。今年的前一個月和前一年都是傳出! – ConductedClever 2014-09-04 05:37:52