create?table?aa(
從事重慶服務(wù)器托管,服務(wù)器租用,云主機(jī),網(wǎng)站空間,域名注冊,CDN,網(wǎng)絡(luò)代維等服務(wù)。
typeId?int,
name?varchar(20))
create?table?bb(
id??int?,
name??varchar(20),
typeId?int?,
num?int?,
m?int?
)
insert?into?aa?values(1,'自行車'),(2,'摩托車'),(3,'小汽車'),(4,'其它')
insert?into?bb?values
(1,'li',1,1,500),
(2,'li',2,2,5000),
(3,'li',3,1,50000),
(4,'wanger',1,1,450),
(5,'wanger',2,1,5600)
select?bb.name,
sum(case??when?aa.name?='自行車'?then???bb.num
else?0?
end?)?as?[自行車num],
sum(case??when?aa.name?='自行車'?then???bb.m
else?0?
end?)?as?[自行車m],
sum(case??when?aa.name?='摩托車'?then???bb.num
else?0?
end?)?as?[摩托車num],
sum(case??when?aa.name?='摩托車'?then???bb.m
else?0?
end?)?as?[摩托車m],
sum(case??when?aa.name?='小汽車'?then???bb.num
else?0?
end?)?as?[小汽車num],
sum(case??when?aa.name?='小汽車'?then???bb.m
else?0?
end?)?as?[小汽車m],
sum(case??when?aa.name?='其它'?then???bb.num
else?0?
end?)?as?[其它num],
sum(case??when?aa.name?='其它'?then???bb.m
else?0?
end?)?as?[其它m]?,
sum(bb.num)?as?[Allnum],
sum(bb.m?)?as?[Allm]?
from?aa?right??join?bb?on?aa.typeId=bb.typeId
group?by?bb.name?
truncate?table?aa
drop?table?aa
truncate?table?bb
drop?table?bb
go
mysql 腳本的方法,請對照這個(gè) sql server腳本去修改,如有疑問,及時(shí)溝通
1、創(chuàng)建一張表,同時(shí)插入數(shù)據(jù)。
2、按照價(jià)格排序.select * from 表名?order by 字段名 [升序|降序]。
3、按照class分組(group by),數(shù)據(jù)會分成三類,肉類、蔬菜類、水果類。
4、按照class分組后在對結(jié)果做一個(gè)處理,統(tǒng)計(jì)三個(gè)類總錢數(shù)分別是多少。這里sum是mysql提供的內(nèi)置函數(shù)(聚合函數(shù)),統(tǒng)計(jì)合的。
5、分組了之后可以通過聚合函數(shù)可以做一系列的查詢操作,查詢每個(gè)類中有多少個(gè)。
6、分組后面跟having做過濾。
select?*?from?(
select?id,num,rank?from?(
select?heyf_tmp.id,heyf_tmp.num,@rownum:=@rownum+1?,
if(@pdept=heyf_tmp.id,@rank:=@rank+1,@rank:=1)?as?rank,
@pdept:=heyf_tmp.id
from?(
select?id,num?from?(SELECT
t.OPERATE_LOG_USER_ID?AS?id,
t.OPERATE_SEARCH_WORD?AS?word,
COUNT(*)AS?num
FROM
skp_operate_log?AS?t
WHERE
t.OPERATE_LOG_TIME
GROUP?BY
id,
word
ORDER?BY
num?DESC)tt?order?by?id?asc?,num?desc
)?heyf_tmp?,(select?@rownum?:=0?,?@pdept?:=?null?,@rank:=0)?a?)?result
)ttt
where?rank?in(1,2)
運(yùn)用統(tǒng)計(jì)函數(shù)即可。MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQLAB公司開發(fā),屬于Oracle旗下產(chǎn)品。MySQL是最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)之一。mysql統(tǒng)計(jì)每個(gè)年級有多少條數(shù)據(jù)運(yùn)用統(tǒng)計(jì)函數(shù),即可計(jì)算。
需要準(zhǔn)備的工具:電腦,sql數(shù)據(jù)庫。
1、首先新建一個(gè)test表,有id,name,second三個(gè)字段,其中name字段有重復(fù)數(shù)據(jù)。
2、輸入“select name,max(second) from test group by name”語句,點(diǎn)擊運(yùn)行。
3、可以看到已經(jīng)查詢出按name分組后取出的second最大的一條記錄。
4、以輸入“select name,max(second) from test group by name order by max(second) desc”語句,按分組后second最大值進(jìn)行降序。
5、如果想查詢mysql分組后最小的一條記錄,輸入“select name,min(second) from test group by name”語句,點(diǎn)擊運(yùn)行即可。
?? 在統(tǒng)計(jì)數(shù)據(jù)的需求中很容易出現(xiàn)按照天來統(tǒng)計(jì)數(shù)據(jù)的場景,有時(shí)某一列的維度在那天并沒有產(chǎn)生數(shù)據(jù),但是又沒有一列是可以確保每天都是有數(shù)據(jù)的,由于mysql中并沒有fulljoin這樣的關(guān)聯(lián)方式,在這種情況下關(guān)聯(lián)查詢就有些費(fèi)勁,解決的辦法也是多種多樣,畢竟條條大路通羅馬嘛,其他的就不說了,這里介紹一種相對方便的方法。
?? 產(chǎn)生一個(gè)足夠長的時(shí)間列,這個(gè)列要能夠包含想要統(tǒng)計(jì)的所有日期。這個(gè)思路的實(shí)現(xiàn)很泛,可以創(chuàng)建一個(gè)日期的臨時(shí)表,然后將想要查的日期插入,拋開創(chuàng)建表比較麻煩之外,一般在職能比較完善的公司,生產(chǎn)環(huán)境創(chuàng)建表或者修改數(shù)據(jù)是需要交給專門的DBA去操作的,各種流程。。。相對這個(gè)較簡單的一種方式就是創(chuàng)建存儲過程,然后產(chǎn)生時(shí)間列,這也是一種解決辦法。
?? 我的思路是先定義一個(gè)時(shí)間變量并初始化,然后和某個(gè)數(shù)據(jù)足夠多的表關(guān)聯(lián)查詢獲取時(shí)間列,這個(gè)表一般選取某張要查的表即可,數(shù)據(jù)條數(shù)只要超過需要查詢的條數(shù)即可,足夠即可,太多就是浪費(fèi),降低查詢效率。
?? 比如說我要查詢2018-01-10到2018-01-20每天的數(shù)據(jù),那么就可以寫成
?? 其中,cdate是我定義的一個(gè)時(shí)間變量,初始化的值是2018-01-09,因?yàn)樵谕饷婺遣糠謭?zhí)行之后值已經(jīng)加1了,已經(jīng)不是2018-01-10了;data_t是我關(guān)聯(lián)產(chǎn)生記錄的實(shí)體表,這個(gè)表只有一個(gè)要求,就是能幫我們產(chǎn)生足夠的時(shí)間列條數(shù),后面的limit 15是幫助我產(chǎn)生15條時(shí)間記錄,可以換成其他條件;生成的t0其實(shí)就是15條全為2018-01-09的記錄,外面的查詢在每掃描一條t0的記錄就會加1天,這樣就會產(chǎn)生連續(xù)的時(shí)間列;WHERE后面是最終查詢的截止條件,換成其他的也可以。
關(guān)聯(lián)其他表舉例:
查詢從2018-01-10到當(dāng)前日期每天的統(tǒng)計(jì)數(shù)據(jù)
??通過上面的例子我想大部分人應(yīng)該可以靈活變化了,比如查詢多少天內(nèi)每天的統(tǒng)計(jì)數(shù)據(jù),某幾個(gè)月內(nèi)每月的統(tǒng)計(jì)數(shù)據(jù)等等,通過修改上面給的例子里面的sql完全可以做到,可以說這種思路就是個(gè)‘萬能模板’,希望本文能夠幫到大家。