本人也是菜鳥級別的。前一段時間做乙個專案。遇到了乙個需求。客戶選擇月月份,就會把選擇的月份的每天所有訂單的總數或者金額返回給前端。但是遇到了乙個問題,比如,1月2號,沒有訂單的話,那就沒有1月2號的字段。也沒有訂單總數與金額。但是前端需要。沒有的話前端不好展示,要補齊日期,總數與金額設定為0。查了很多方法。都不盡人意,自己嘗試寫了,也算實現了。對於日期,有一種簡單的方法,就是建乙個時間表,連表查詢。我是根據前端創過來的時間段後端自己組裝時間。
mysql自己網上看了別人的寫的,有點複雜。其實想想可以用開始時間與結束時間來查。但是只要效果有了。我也就沒有改。
<selectid="selectorderbymoney"resulttype="com.rbu.entity.extention.orderenyitymodel">
select
sum(t.totalmoney) as totalmoney ,substr(t.deducttime, 1, 10) as monthday
from(select deduct.deduct_time as deducttime,deduct.deduct_money as totalmoney from custom_order as cd
left join deduct on cd.order_id = deduct.order_id
where deduct.user_id = #
group by deduct.order_id ) t
where t.deducttime like concat( #,'%')
group by
substr(t.deducttime, 1, 10)
select>
totalmoney是每月每天的總金額字段,monthday是時間字段。
<orderstotal是每月每天的訂單的總數,selectid="selectorderbynumber"resulttype="com.rbu.entity.extention.orderenyitymodel">
select
count(*) as orderstotal,
substr(t.deducttime, 1, 10) as monthday
from
(select
cd.order_id,
cd.order_no,
cd.user_id,
deduct.deduct_time as deducttime,
deduct.deduct_money as money
from
custom_order as cd
left join deduct on cd.order_id = deduct.order_id
where deduct.user_id = #
group by
deduct.order_id
) twhere
t.deducttime like concat( #,'%')
group by
substr(t.deducttime, 1, 10)
select>
monthday是時間字段。
主要的來了。
/**調這個方法傳入引數比如「2017-08」,就可以等到2023年8月一共多少天。* 得到乙個月多少天
*@param
date
*@return
*/public static intgetdaynum(string date)
下面這一段是
得到每月每天訂單的金額
intdays = createsessionutil.getdaynum(date);//某年某月的天數。date引數是前端傳給我的時間。string mday =newstring[days];//建立乙個時間陣列
string strs = date.split("-");//通過「-」把時間擷取成乙個陣列
string years = strs[0];//得到年
string month = strs[1];//得到月
bigdecimal bigdecimal =newbigdecimal(0);//這個是用來給總金額賦值的。為0
listlist =newarraylist(days);//這個集合是用來裝返回給前端的資料的
.selectorderbymoney(date,userid);//這個是我資料庫去查出來的資料
for(inti = 0; i < days; i++)else
for(orderenyitymodel oe: orderenyitymodels)
}
list.add(enyitymodel);//把賦值的物件給加入集合}
下面的是算每月每天訂單的總數。我就不給注釋,都差不多
intdays = createsessionutil.getdaynum(date);//某年某月的天數string mday =newstring[days];
string strs = date.split("-");
string years = strs[0];
string month = strs[1];
listlist =newarraylist(days);
//查出來的訂單總數.selectorderbynumber(date,userid);
for(inti = 0; i < days; i++)else
for(orderenyitymodel oe: orderenyitymodels)
}
list.add(enyitymodel);}
下面是查出來的資料,寫的不是很好。給一些像我一樣的菜鳥。
MySQL查詢 每年 每月 每日 訂單數和訂單金額
mysql函式 1.from unixtime 函式時間戳轉換時間 select from unixtime 1588238359 as 時間 2.year 獲取時間的年份 select year 2020 04 30 17 19 19 as 年 3.month 獲取時間的月份 select mon...
MySQL查詢 每年 每月 每日 訂單數和訂單金額
1.from unixtime 格式化mysql時間戳函式 select from unixtime 1610620290 y m d h i s as 時間 year 獲取時間的年份 select year 2021 01 14 18 31 30 as 年 month 獲取時間的月份 select...
Mysql查詢每天 每週 每月 每年的資料
查詢每天的資料 select count 1 as total,date format create time,y m d as time from op endor info group by date format create time,y m d 查詢每週的資料 select count 1...