重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
mysql如何实现多行查询结果合并成一行,mysql如何实现多行查询结果合并成一行网站简介信息
成都创新互联公司于2013年开始,先为泽库等服务建站,泽库等地企业,进行企业商务咨询服务。为泽库企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
利用函数:group_concat(),实现一个ID对应多个名称时,原本为多行数据,把名称合并成一行。
其完整语法:
GROUP_CONCAT(expr)
该函数返回带有来自一个组的连接的非NULL值的字符串结果。其完整的语法如下所示:
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中,你可以获取表达式组合的连接值。你可以使用DISTINCT删去重复值。假若你希望多结果值进行排序,则应该使用 ORDER BY子句。若要按相反顺序排列,将 DESC (递减) 关键词添加到你要用ORDER BY 子句进行排序的列名称中。默认顺序为升序;可使用ASC将其明确指定。 SEPARATOR 后面跟随应该被插入结果的值中间的字符串值。默认为逗号 (‘,')。通过指定SEPARATOR '' ,你可以删除所有分隔符。
使用group_concat_max_len系统变量,你可以设置允许的最大长度。 程序中进行这项操作的语法如下,其中 val 是一个无符号整数:
SET [SESSION | GLOBAL] group_concat_max_len = val;
求下和就可以了,例如
select 编号,姓名,sum(份数) 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是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。
MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
由于其社区版的性能卓越,搭配 PHP 和 Apache 可组成良好的开发环境。
我是用sqlserver写的,语法雷同
该改动的地方我都给你改成mysql的语法
创建表
create table t
(`date` varchar(10),
rmb int)
插入数据
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`
结果
MySQL InnoDB 表数据页或者二级索引页(简称数据页或者索引页)的合并与分裂对 InnoDB 表整体性能影响很大;数据页的这类操作越多,对 InnoDB 表数据写入的影响越大。
MySQL 提供了一个数据页合并临界值(MERGE_THRESHOLD),在某些场景下,可以人为介入,减少数据页的合并与分裂。
在 InnoDB 表里,每个数据页默认16K 大小,默认 MERGE_THRESHOLD 值为 50,取值范围从 1 到 50,默认值即是最大值。也就是当页面记录数占比小于 50% 时,MySQL 会把这页和相邻的页面进行合并,保证数据页的紧凑,避免太多浪费。
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