MySql不支持選取前百分之幾的記錄,但是可以通過存儲過程來實(shí)現(xiàn),請參見下列實(shí)驗(yàn):
在浦北等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都做網(wǎng)站、成都網(wǎng)站制作 網(wǎng)站設(shè)計(jì)制作按需設(shè)計(jì),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),營銷型網(wǎng)站建設(shè),外貿(mào)網(wǎng)站建設(shè),浦北網(wǎng)站建設(shè)費(fèi)用合理。
查看學(xué)生表的總行數(shù):
mysql select count(*) as rows from students;
向變量賦值@percent 取前50%的行數(shù):
mysql select count(*)*50/100 into @percent from students;
預(yù)設(shè)SQL語句:
mysql prepare stmt from "select * from students limit ?";
運(yùn)行預(yù)設(shè)SQL語句:
mysql execute stmt using @percent;
請參見附圖
這樣就實(shí)現(xiàn)了選取前50%的記錄(全部6條記錄中的前3條也就是50%)
select?a?,b,?concat(cast(coalesce(round(sum(a)/sum(b),2),0)*100?as?char),'%')?as?c?from?test
這樣試試
myisam直接count然后limit取。innodb count記得用二級索引作為條件。count(*)from table where uid0 . 這樣。不然不準(zhǔn)還慢。
建立數(shù)據(jù)庫表時(shí),百分?jǐn)?shù)要用字符類型。
原因:因?yàn)榘俜痔枺?)不是可讀的數(shù)字類型,除非用小數(shù)表示,否則只能用字符類型來保存。
工具:mysql 5.6
測試步驟:
1、數(shù)據(jù)庫中test表結(jié)構(gòu)如下,其中col1為字符類型,col2位數(shù)字類型
2、在col1中插入50%這個(gè)數(shù)據(jù)。語句如下:
insert?into?test(col1)?values?('50%');
插入后結(jié)果:
3、在col2中也插入50%這個(gè)數(shù)據(jù),語句如下:
update?test?set?col2=50%;
系統(tǒng)會報(bào)錯(cuò):
總結(jié):說明帶百分號的數(shù)據(jù)只能用字符類型來存儲。