mysql如何實現(xiàn)多行查詢結(jié)果合并成一行,mysql如何實現(xiàn)多行查詢結(jié)果合并成一行網(wǎng)站簡介信息
成都創(chuàng)新互聯(lián)公司于2013年開始,先為澤庫等服務(wù)建站,澤庫等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為澤庫企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
利用函數(shù):group_concat(),實現(xiàn)一個ID對應(yīng)多個名稱時,原本為多行數(shù)據(jù),把名稱合并成一行。
其完整語法:
GROUP_CONCAT(expr)
該函數(shù)返回帶有來自一個組的連接的非NULL值的字符串結(jié)果。其完整的語法如下所示:
GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | expr}
[ASC | DESC] [,col_name ...]]
[SEPARATOR str_val])
mysql SELECT student_name,
- GROUP_CONCAT(test_score)
- FROM student
- GROUP BY student_name;
Or:
mysql SELECT student_name,
- GROUP_CONCAT(DISTINCT test_score
- ORDER BY test_score DESC SEPARATOR ' ')
- FROM student
- GROUP BY student_name;
在MySQL中,你可以獲取表達(dá)式組合的連接值。你可以使用DISTINCT刪去重復(fù)值。假若你希望多結(jié)果值進(jìn)行排序,則應(yīng)該使用 ORDER BY子句。若要按相反順序排列,將 DESC (遞減) 關(guān)鍵詞添加到你要用ORDER BY 子句進(jìn)行排序的列名稱中。默認(rèn)順序為升序;可使用ASC將其明確指定。 SEPARATOR 后面跟隨應(yīng)該被插入結(jié)果的值中間的字符串值。默認(rèn)為逗號 (‘,')。通過指定SEPARATOR '' ,你可以刪除所有分隔符。
使用group_concat_max_len系統(tǒng)變量,你可以設(shè)置允許的最大長度。 程序中進(jìn)行這項操作的語法如下,其中 val 是一個無符號整數(shù):
SET [SESSION | GLOBAL] group_concat_max_len = val;
求下和就可以了,例如
select 編號,姓名,sum(份數(shù)) from tbname group by 編號,姓名
試試,不行就自己修改下
分別求出d01、d02、d03......d31列的和;
SELECT count(d01),count(d02),count(d03).....count(d31) FROM m201201;
分別求出3006、3008、3010、3016、3034每一行中d01——d31之間記錄的和
SELECT (d01+d02+d03+....+d31) as d_all FROM m201201 WHERE name IN('3006','3008','3010','3016','3034');
MySQL是一個關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQL AB 公司開發(fā),目前屬于 Oracle 旗下產(chǎn)品。MySQL 是最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)之一,在 WEB 應(yīng)用方面,MySQL是最好的 RDBMS (Relational Database Management System,關(guān)系數(shù)據(jù)庫管理系統(tǒng)) 應(yīng)用軟件。
MySQL是一種關(guān)系數(shù)據(jù)庫管理系統(tǒng),關(guān)系數(shù)據(jù)庫將數(shù)據(jù)保存在不同的表中,而不是將所有數(shù)據(jù)放在一個大倉庫內(nèi),這樣就增加了速度并提高了靈活性。
MySQL所使用的 SQL 語言是用于訪問數(shù)據(jù)庫的最常用標(biāo)準(zhǔn)化語言。MySQL 軟件采用了雙授權(quán)政策,分為社區(qū)版和商業(yè)版,由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,一般中小型網(wǎng)站的開發(fā)都選擇 MySQL 作為網(wǎng)站數(shù)據(jù)庫。
由于其社區(qū)版的性能卓越,搭配 PHP 和 Apache 可組成良好的開發(fā)環(huán)境。
我是用sqlserver寫的,語法雷同
該改動的地方我都給你改成mysql的語法
創(chuàng)建表
create?table?t
(`date`?varchar(10),
rmb?int)
插入數(shù)據(jù)
insert?into?t?values?('20140113',60);
insert?into?t?values?('20140114',50);
運行語句
select?s1.`date`,s1.rmb,s2.total
from?t?s1,
(select?t2.`date`,sum(t1.rmb)?total
from?t?t1?left?join?t?t2?on?t1.date=t2.date
group?by?t2.`date`)?s2
where?s1.`date`=s2.`date`
結(jié)果
MySQL InnoDB 表數(shù)據(jù)頁或者二級索引頁(簡稱數(shù)據(jù)頁或者索引頁)的合并與分裂對 InnoDB 表整體性能影響很大;數(shù)據(jù)頁的這類操作越多,對 InnoDB 表數(shù)據(jù)寫入的影響越大。
MySQL 提供了一個數(shù)據(jù)頁合并臨界值(MERGE_THRESHOLD),在某些場景下,可以人為介入,減少數(shù)據(jù)頁的合并與分裂。
在 InnoDB 表里,每個數(shù)據(jù)頁默認(rèn)16K 大小,默認(rèn) MERGE_THRESHOLD 值為 50,取值范圍從 1 到 50,默認(rèn)值即是最大值。也就是當(dāng)頁面記錄數(shù)占比小于 50% 時,MySQL 會把這頁和相鄰的頁面進(jìn)行合并,保證數(shù)據(jù)頁的緊湊,避免太多浪費。
UPDATE TableName SET
COUNT = CASE WHEN math 0 THEN 1 ELSE 0 END
+ CASE WHEN english 0 THEN 1 ELSE 0 END
+ CASE WHEN history 0 THEN 1 ELSE 0 END