mysql查詢數據統計

//統計某個時間段 噸數和銷售額的統計數據
SELECT tr.item_name AS "商品名稱" ,SUM(tr.item_num) AS "噸數",SUM(tr.item_listing_price) AS "銷售額" 
FROM tr_order_item tr WHERE tr.dr = 0 AND tr.create_time BETWEEN "2018-10-20" AND "2019-03-12" 
GROUP BY tr.item_name 

//按照油品名稱和時間統計
SELECT tr.item_name AS "商品名稱" ,tr.item_num AS "商品數量",tr.item_listing_price AS "銷售額" 
FROM tr_order_item tr WHERE tr.dr = 0 AND tr.create_time BETWEEN "2018-10-20" AND "2019-03-12" 
GROUP BY tr.item_name 

//統計一年內各個月份的數據
select 2019*10+month(tr.create_time) as "月份",month(tr.create_time)as "月份",SUM(tr.actual_pay) as "加油總金額" ,SUM(tr.total_item_num) AS "加油量", count(*) AS "加油車次"
from tr_bbc_order tr 
where year(tr.create_time) = 2019 group by month (tr.create_time);

統計本年本月本日

//本年
SELECT tr.item_name AS "商品名稱" ,SUM(tr.total_item_num) AS "噸數",SUM(tr.actual_pay) AS "銷售額" 
FROM tr_bbc_order tr 
WHERE tr.dr = 0 AND YEAR(tr.create_time)=YEAR(NOW()) AND tr.account_id = 15561189252
GROUP BY tr.item_name 

//本月
SELECT tr.item_name AS "商品名稱" ,SUM(tr.total_item_num) AS "噸數",SUM(tr.actual_pay) AS "銷售額" 
FROM tr_bbc_order tr 
WHERE tr.dr = 0 AND DATE_FORMAT( tr.create_time, '%Y%m' ) = DATE_FORMAT( CURDATE( ) , '%Y%m' ) AND tr.account_id = 15561189252
GROUP BY tr.item_name  

//當天
SELECT tr.item_name AS "商品名稱" ,SUM(tr.total_item_num) AS "噸數",SUM(tr.actual_pay) AS "銷售額" 
FROM tr_bbc_order tr 
WHERE tr.dr = 0 AND to_days(tr.create_time) = to_days(now()) AND tr.account_id = 15561189252
GROUP BY tr.item_name  

 

 

 

 

二、內建日期處理函數

  • NOW() 返回當前的日期和時間。

 

  • UNIX_TIMESTAMP() 函數

定義和用法:

1  無參數調用:UNIX_TIMESTAMP()  返回值:自'1970-01-01 00:00:00'的到當前時間的秒數差
2  有參數調用:UNIX_TIMESTAMP(date) 返回值:自'1970-01-01 00:00:00'與指定時間的秒數差
查詢:

select UNIX_TIMESTAMP(), UNIX_TIMESTAMP('20180912');

DATE_FORMAT() 函數 

DATE_FORMAT(date,format) 函數用於以不同的格式顯示日期/時間數據。

select DATE_FORMAT(NOW(),'%Y-%m-%d');
 

 

  •  Date類型

date數據類型
數據類型    描述
DATE()    日期。格式:YYYY-MM-DD
註釋:支持的範圍是從 '1000-01-01' 到 '9999-12-31'

DATETIME()    *日期和時間的組合。格式:YYYY-MM-DD HH:MM:SS
註釋:支持的範圍是從 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'

TIMESTAMP()    *時間戳。TIMESTAMP 值使用 Unix 紀元('1970-01-01 00:00:00' UTC) 至今的秒數來存儲。格式:YYYY-MM-DD HH:MM:SS
註釋:支持的範圍是從 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC

TIME()    時間。格式:HH:MM:SS
註釋:支持的範圍是從 '-838:59:59' 到 '838:59:59'

YEAR()    2 位或 4 位格式的年。   year(tr.create_time)
註釋:4 位格式所允許的值:1901 到 2155。2 位格式所允許的值:70 到 69,表示從 1970 到 2069。

monte 月

month(tr.create_time)as "月份"

注: 即便 DATETIME 和 TIMESTAMP 返回相同的格式,它們的工作方式很不同。
在 INSERT 或 UPDATE 查詢中,TIMESTAMP 自動把自身設置爲當前的日期和時間。
TIMESTAMP 也接受不同的格式,比如 YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD 或 YYMMDD。
format 可以使用的格式有:
格式    描述
%a    縮寫星期名
%b    縮寫月名
%c    月,數值
%D    帶有英文前綴的月中的天
%d    月的天,數值(00-31)
%e    月的天,數值(0-31)
%f    微秒
%H    小時(00-23)
%h    小時(01-12)
%I    小時(01-12)
%i    分鐘,數值(00-59)
%j    年的天(001-366)
%k    小時(0-23)
%l    小時(1-12)
%M    月名
%m    月,數值(00-12)
%p    AM 或 PM
%r    時間,12-小時(hh:mm:ss AM 或 PM)
%S    秒(00-59)
%s    秒(00-59)
%T    時間, 24-小時(hh:mm:ss)
%U    周(00-53)星期日是一週的第一天
%u    周(00-53)星期一是一週的第一天
%V    周(01-53)星期日是一週的第一天,與 %X 使用
%v    周(01-53)星期一是一週的第一天,與 %x 使用
%W    星期名
%w    周的天(0=星期日, 6=星期六)
%X    年,其中的星期日是周的第一天,4 位,與 %V 使用
%x    年,其中的星期一是周的第一天,4 位,與 %v 使用
%Y    年,4 位
%y    年,2 位
 

四、分組統計
說明
我們先在數據庫中創建一張表

SET FOREIGN_KEY_CHECKS=0;
 
-- ----------------------------
-- Table structure for date_group
-- ----------------------------
DROP TABLE IF EXISTS `date_group`;
CREATE TABLE `date_group` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `ei` bigint(20) NOT NULL,
  `day` varchar(25) DEFAULT NULL COMMENT '日期',
  `openPrice` decimal(25,2) DEFAULT NULL COMMENT '開盤價',
  `closePrice` decimal(25,2) DEFAULT NULL COMMENT '收盤價',
  `lowPrice` decimal(25,2) DEFAULT NULL COMMENT '最低價',
  `higPrice` decimal(25,2) DEFAULT NULL COMMENT '最高價',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8;
 
-- ----------------------------
-- Records of date_group
-- ----------------------------
INSERT INTO `date_group` VALUES ('1', '10001', '20161230', '10.00', '20.00', '5.00', '25.00');
INSERT INTO `date_group` VALUES ('2', '10001', '20161231', '11.00', '19.00', '6.00', '26.00');
INSERT INTO `date_group` VALUES ('3', '10001', '20170101', '12.00', '18.00', '7.00', '27.00');
INSERT INTO `date_group` VALUES ('5', '10001', '20170102', '12.00', '18.00', '7.00', '27.00');
INSERT INTO `date_group` VALUES ('6', '10001', '20170203', '13.00', '19.00', '8.00', '21.00');
INSERT INTO `date_group` VALUES ('7', '10001', '20170204', '15.00', '20.00', '9.00', '24.00');
INSERT INTO `date_group` VALUES ('8', '10001', '20170205', '13.00', '12.00', '4.00', '27.00');
INSERT INTO `date_group` VALUES ('9', '10001', '20170206', '12.00', '13.00', '5.00', '25.00');
INSERT INTO `date_group` VALUES ('10', '10001', '20180109', '14.00', '11.00', '6.00', '22.00');
INSERT INTO `date_group` VALUES ('11', '10001', '20180110', '17.00', '18.00', '8.00', '23.00');
INSERT INTO `date_group` VALUES ('12', '10001', '20180111', '19.00', '12.00', '9.00', '22.00');
INSERT INTO `date_group` VALUES ('13', '10001', '20180112', '13.00', '16.00', '2.00', '25.00');
INSERT INTO `date_group` VALUES ('14', '10001', '20180113', '11.00', '17.00', '1.00', '28.00');
INSERT INTO `date_group` VALUES ('15', '10001', '20180114', '10.00', '13.00', '8.00', '24.00');
INSERT INTO `date_group` VALUES ('16', '10002', '20161230', '15.00', '22.00', '5.00', '25.00');
INSERT INTO `date_group` VALUES ('17', '10002', '20161231', '13.00', '19.00', '6.00', '22.00');
INSERT INTO `date_group` VALUES ('18', '10002', '20170101', '12.00', '14.00', '7.00', '23.00');
INSERT INTO `date_group` VALUES ('19', '10002', '20170102', '14.00', '18.00', '7.00', '22.00');
INSERT INTO `date_group` VALUES ('20', '10002', '20170203', '17.00', '12.00', '8.00', '23.00');
INSERT INTO `date_group` VALUES ('21', '10002', '20170204', '19.00', '20.00', '9.00', '22.00');
INSERT INTO `date_group` VALUES ('22', '10002', '20170205', '13.00', '17.00', '4.00', '22.00');
INSERT INTO `date_group` VALUES ('23', '10002', '20170206', '11.00', '13.00', '6.00', '25.00');
INSERT INTO `date_group` VALUES ('24', '10002', '20180109', '10.00', '17.00', '8.00', '28.00');
INSERT INTO `date_group` VALUES ('25', '10002', '20180110', '17.00', '18.00', '7.00', '24.00');
INSERT INTO `date_group` VALUES ('26', '10002', '20180111', '19.00', '25.00', '8.00', '22.00');
INSERT INTO `date_group` VALUES ('27', '10002', '20180112', '13.00', '19.00', '9.00', '25.00');
INSERT INTO `date_group` VALUES ('28', '10002', '20180113', '15.00', '26.00', '4.00', '28.00');
INSERT INTO `date_group` VALUES ('29', '10002', '20180114', '13.00', '16.00', '5.00', '24.00');
 

按年分組統計
-- 第一種
SELECT a.ei, a.day, DATE_FORMAT(a.day,'%Y') year, SUM(a.openPrice) FROM date_group AS a GROUP BY a.ei, year;
-- 第二種
SELECT a.ei, a.day, YEAR(a.day) year, AVG(a.closePrice) FROM date_group AS a GROUP BY a.ei, year;
 

按季分組統計 
-- 注意區分出 年
 
-- 第一種
SELECT a.ei, a.day, CONCAT(YEAR(a.day),FLOOR((date_format(a.day, '%m')+2)/3)) quarter, SUM(a.openPrice) FROM date_group AS a GROUP BY a.ei, quarter;
-- 第二種
SELECT a.ei, a.day, CONCAT(YEAR(a.day),QUARTER(a.day)) quarter, AVG(a.closePrice) FROM date_group AS a GROUP BY a.ei, quarter;
按月分組統計
-- 第一種
SELECT a.ei, a.day, date_format(a.day, '%Y%m') month, SUM(a.openPrice) FROM date_group AS a GROUP BY a.ei, month;
 
-- 第二種
-- month(date)函數 和 %c 差不多,返回的是月的值(如一月爲 ‘1’)
SELECT a.ei, a.day, CONCAT(YEAR(a.day),MONTH(a.day)) month, AVG(a.closePrice) FROM date_group AS a GROUP BY a.ei, month;
SELECT a.ei, a.day, date_format(a.day, '%Y%c') month, AVG(a.closePrice) FROM date_group AS a GROUP BY a.ei, month;
按周分組統計
-- 第一種
-- 以週一爲一週起始,所以20170101週日,爲2016年最後一週,20170102 爲2017年第一週
SELECT a.ei, a.day, date_format(a.day, '%x%v') week, SUM(a.lowPrice) FROM date_group AS a GROUP BY a.ei, week;
SELECT a.ei, a.day, (UNIX_TIMESTAMP(a.day) - (if(date_format(a.day, '%w'), date_format(a.day, '%w') - 1, 6) * 86400) - 316800) / 604800 week, SUM(a.lowPrice) FROM date_group AS a GROUP BY a.ei, week;
 
 
-- 第二種
-- 以週日爲一週起始,所以20170101位2017年第一週
SELECT a.ei, a.day, date_format(a.day, '%X%V') week, SUM(a.lowPrice) FROM date_group AS a GROUP BY a.ei, week;
SELECT a.ei, a.day, (UNIX_TIMESTAMP(a.day) - date_format(a.day, '%w') * 86400 - 316800) / 604800 week, SUM(a.lowPrice) FROM date_group AS a GROUP BY a.ei, week;

 

 

統計一年內會員的銷售數據,並展示油品種類

GROUP_CONCAT(DISTINCT(tr.item_name) SEPARATOR ',')

DISTINCT 查重油品

 

 

 

 


來源:CSDN 
原文:https://blog.csdn.net/xie8409959/article/details/82663899 
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章