2013-07-12 24 views
0

我有一個名爲數據庫表user_transaction,其結構如下:如何顯示以下場景的分組結果?

transaction_id mediumint(6) UNSIGNED (PK) 
transaction_no varchar(55) 
transaction_cc_avenue_no varchar(55) 
transaction_card_category varchar(100) 
transaction_user_id  varchar(32) 
transaction_user_name varchar(255) 
transaction_user_email_id varchar(255) 
transaction_deal_code varchar(10) 
transaction_dc_id smallint(4) 
transaction_amount float(10,2) 
transaction_discount float(10,2) 
transaction_total_amount float(10,2) 
transaction_data_assign enum('0', '1') 
transaction_status enum('success', 'inprocess', 'fail', 'cancelled')  
transaction_date bigint(12) 
transaction_update_date bigint(12) 
transaction_update_user_id varchar(32) 

我使用UNIX時間戳值的日期存儲在列transaction_date。現在我從'dd/mm/yyyy'格式獲取兩個日期,將其轉換爲UNIX時間戳並在以下查詢中使用它。現在我想顯示日期編號。不同transaction_status的交易(即每個日期發生的總交易,狀態'success','inprocess','fail'和'取消')的交易總數。這些記錄應按交易日期進行分組。爲了得到這個結果,我嘗試了很多,但沒有取得任何成功。爲您的參考我給我的查詢下面:

SELECT COUNT(*) `total count`, SUM(transaction_status = 'success') `success`, SUM(transaction_status = 'inprocess') `inprocess`, SUM(transaction_status = 'fail') `fail`, SUM(transaction_status = 'cancelled') `cancelled` FROM user_transaction WHERE transaction_date >= '1325376000' AND transaction_date <= '1338422400' GROUP BY FROM_UNIXTIME(transaction_date) 

任何人都可以在這方面幫助我嗎?提前致謝。

回答

1

from_unixtime()函數創建日期和時間。你只是想日期:

SELECT date(FROM_UNIXTIME(transaction_date)), 
     COUNT(*) `total count`, SUM(transaction_status = 'success') `success`, 
     SUM(transaction_status = 'inprocess') `inprocess`, 
     SUM(transaction_status = 'fail') `fail`, 
     SUM(transaction_status = 'cancelled') `cancelled` 
FROM user_transaction 
WHERE transaction_date >= 1325376000 AND transaction_date <= 1338422400 
GROUP BY date(FROM_UNIXTIME(transaction_date)) 

我也下降了,從數常數'。這些都是數字,因此誤導它們看起來像字符串(不會影響性能,只是查詢的可理解性)。

編輯:

如果你想按每月:

SELECT year(date(FROM_UNIXTIME(transaction_date))), 
     month(date(FROM_UNIXTIME(transaction_date))), 
     COUNT(*) `total count`, SUM(transaction_status = 'success') `success`, 
     SUM(transaction_status = 'inprocess') `inprocess`, 
     SUM(transaction_status = 'fail') `fail`, 
     SUM(transaction_status = 'cancelled') `cancelled` 
FROM user_transaction 
WHERE transaction_date >= 1325376000 AND transaction_date <= 1338422400 
GROUP BY year(date(FROM_UNIXTIME(transaction_date))), 
     month(date(FROM_UNIXTIME(transaction_date))) 

您可能需要更改日期範圍內的where條款被包括在內。

+0

:非常感謝你再次。您的查詢確實對我有幫助。你能幫我多一點嗎?在上面的查詢中,rsults以日期顯示。現在我想在每個月顯示相同的結果,我應該如何實現它?手段例如我想要顯示從2012年1月到2013年6月的月結果 – PHPLover

+0

@phpLover。 。 。您可以在日期或函數'date_format()'上使用函數'year()'和'month()'。請確保你在'group by'中輸入了與'select'相同的調用。 –

+0

:感謝您的建議。我試過你的伎倆,但它沒有奏效。可能是我做錯了什麼。你能否提供給我這個問題的答案?我會很感激你。 – PHPLover