比如說我有一個資料庫,裡面有一個訂單表,表名字為orders,這個訂單表有個欄位是add_time也就是添加訂單的時間戳記。
我現在想產生一張報表,報表上顯示
每天的訂單數量和增長量情況,而且還要帶上這個天數(Y-m-d格式即可,因為我最終要輸出到前端的echarts統計圖或者highcharts統計圖),請問這種需求sql語句該怎麼寫?
端午節快樂,謝謝回答!~
回複內容:
比如說我有一個資料庫,裡面有一個訂單表,表名字為orders,這個訂單表有個欄位是add_time也就是添加訂單的時間戳記。
我現在想產生一張報表,報表上顯示每天的訂單數量和增長量情況,而且還要帶上這個天數(Y-m-d格式即可,因為我最終要輸出到前端的echarts統計圖或者highcharts統計圖),請問這種需求sql語句該怎麼寫?
端午節快樂,謝謝回答!~
因為剛剛搭完一個運營系統的架構,提供一個基本思路:
建一個新表,把你需要統計的每一項資料,以及統計時間,作為新表的column,像這樣:
create table analysis ( today_timestamp varchar(20), order_count varchar(20), increase_value varchar(20), primary key (today_timestamp) );
針對寫一個php指令碼,例如叫job.php來獲得當天你需要統計的資料:訂單數、增長量,等等。例如你需要所有訂單的數量就select count(*) from orders,具體怎麼寫就是另一個問題了。獲得之後,插入剛才那張表analysis裡。如果希望它自動執行,可以考慮用crontab。
當你要輸出到前端的echarts統計圖或者highcharts統計圖的時候,按日期讀取這個表中的資料就可以了
使用group by統計,日期欄位分為年,月,日,時,分,各為一列,用於統計,記得加索引和分表。
你的這個需求最好給一個範例的資料結構
SELECT FROM_UNIXTIME(add_time, "%Y-%m-%d") order_date, count(1) AS today_c, count(1) - last_c AS change_with_lastFROM ordersLEFT JOIN ( SELECT FROM_UNIXTIME(add_time, "%Y-%m-%d") AS last_date, count(1) AS last_c FROM orders GROUP BY FROM_UNIXTIME(add_time, "%Y-%m-%d")) last ON ( FROM_UNIXTIME(temp.add_time, "%Y-%m-%d") = DATE_ADD( last.last_date, INTERVAL 1 DAY ))GROUP BY FROM_UNIXTIME(add_time);
這個應該能達到預期的結果,但是最好還是使用一個資料表去統計每天的結果,不然效能會有問題