当前位置: 首页 > news >正文

响水网站建设服务商网页美工设计流程为

响水网站建设服务商,网页美工设计流程为,长沙房产网站,工程项目信息查询行转列方法总结1、使用case…when…then2、使用SUM(IF()) 生成列3、使用SUM(IF()) 生成列 WITH ROLLUP 生成汇总行4、使用SUM(IF()) 生成列 UNION 生成汇总行,并利用 IFNULL将汇总行标题显示为 Total5、使用SUM(IF()) 生成列,直接生成汇总结果,不再利用…

行转列方法总结

1、使用case…when…then

2、使用SUM(IF()) 生成列

3、使用SUM(IF()) 生成列 + WITH ROLLUP 生成汇总行

4、使用SUM(IF()) 生成列 + UNION 生成汇总行,并利用 IFNULL将汇总行标题显示为 Total

5、使用SUM(IF()) 生成列,直接生成汇总结果,不再利用子查询

环境准备:建表语句 + 初始化数据

-- house.base_score definitionCREATE TABLE `base_score` (`id` int NOT NULL AUTO_INCREMENT,`userid` varchar(20) NOT NULL COMMENT '用户id',`subject` varchar(20) DEFAULT NULL COMMENT '科目',`score` double DEFAULT NULL COMMENT '成绩',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
--- 插入数据INSERT INTO base_score(userid,subject,score) VALUES ('001','语文',90);
INSERT INTO base_score(userid,subject,score) VALUES ('001','数学',92);
INSERT INTO base_score(userid,subject,score) VALUES ('001','英语',80);
INSERT INTO base_score(userid,subject,score) VALUES ('002','语文',88);
INSERT INTO base_score(userid,subject,score) VALUES ('002','数学',90);
INSERT INTO base_score(userid,subject,score) VALUES ('002','英语',75.5);
INSERT INTO base_score(userid,subject,score) VALUES ('003','语文',70);
INSERT INTO base_score(userid,subject,score) VALUES ('003','数学',85);
INSERT INTO base_score(userid,subject,score) VALUES ('003','英语',90);
INSERT INTO base_score(userid,subject,score) VALUES ('003','政治',82);

使用case…when…then 实现行转列

-- 通过case...when...then 实现行记录转列记录
SELECT userid,
SUM(CASE `subject` WHEN '语文' THEN score ELSE 0 END) as '语文',
SUM(CASE `subject` WHEN '数学' THEN score ELSE 0 END) as '数学',
SUM(CASE `subject` WHEN '英语' THEN score ELSE 0 END) as '英语',
SUM(CASE `subject` WHEN '政治' THEN score ELSE 0 END) as '政治'
FROM base_score
GROUP BY userid

使用SUM(IF()) 生成行转列

-- 使用sum(if) 实现行记录转列记录
SELECT userid,
SUM(IF(`subject`='语文',score,0)) as '语文',
SUM(IF(`subject`='数学',score,0)) as '数学',
SUM(IF(`subject`='英语',score,0)) as '英语',
SUM(IF(`subject`='政治',score,0)) as '政治'
FROM base_score
GROUP BY userid

温馨提示:

(1)SUM() 是为了能够使用GROUP BY根据userid进行分组,因为每一个userid对应的subject="语文"的记录只有一条,所以SUM() 的值就等于对应那一条记录的score的值。

假如userid =‘001’ and subject=‘语文’ 的记录有两条,则此时SUM() 的值将会是这两条记录的和,同理,使用Max()的值将会是这两条记录里面值最大的一个。但是正常情况下,一个user对应一个subject只有一个分数,因此可以使用SUM()、MAX()、MIN()、AVG()等聚合函数都可以达到行转列的效果。

(2)IF(subject=‘语文’,score,0) 作为条件,即对所有subject='语文’的记录的score字段进行SUM()、MAX()、MIN()、AVG()操作,如果score没有值则默认为0。

使用SUM(IF()) 生成列 + WITH ROLLUP 生成汇总行

-- 使用rollup 生成汇总记录SELECT userid,IFNULL(`subject`,'total') AS `subject`,SUM(score) AS scoreFROM base_scoreGROUP BY userid,`subject`WITH ROLLUPHAVING userid IS NOT NULL
-- 使用sum(if) 实现行记录转列记录 + WITH ROLLUP 生成汇总行SELECT IFNULL(userid,'total') AS userid,
SUM(IF(`subject`='语文',score,0)) as '语文',
SUM(IF(`subject`='数学',score,0)) as '数学',
SUM(IF(`subject`='英语',score,0)) as '英语',
SUM(IF(`subject`='政治',score,0)) as '政治',
SUM(IF(`subject`='total',score,0)) AS '总计'
FROM (SELECT userid,IFNULL(`subject`,'total') AS `subject`,SUM(score) AS scoreFROM base_scoreGROUP BY userid,`subject`WITH ROLLUPHAVING userid IS NOT NULL
) as tmp
GROUP BY userid
WITH ROLLUP;

使用SUM(IF()) 生成列 + UNION 生成汇总行,并利用 IFNULL将汇总行标题显示为 Total

-- 利用SUM(IF()) 生成列 + UNION 生成汇总行,并利用 IFNULL将汇总行标题显示为 Total
SELECT userid,
SUM(IF(`subject`='语文',score,0)) AS 语文,
SUM(IF(`subject`='数学',score,0)) AS 数学,
SUM(IF(`subject`='英语',score,0)) AS 英语,
SUM(IF(`subject`='政治',score,0)) AS 政治,
SUM(score) AS TOTAL
FROM base_score
GROUP BY userid
UNION
SELECT 'TOTAL',
SUM(IF(`subject`='语文',score,0)) AS 语文,
SUM(IF(`subject`='数学',score,0)) AS 数学,
SUM(IF(`subject`='英语',score,0)) AS 英语,
SUM(IF(`subject`='政治',score,0)) AS 政治,
SUM(score) FROM base_score

利用SUM(IF()) 生成列,直接生成结果不再利用子查询

-- 利用SUM(IF()) 生成列 + with rollup 汇总列,直接生成结果不再利用子查询
SELECT userid,
SUM(IF(`subject`='语文',score,0)) AS 语文,
SUM(IF(`subject`='数学',score,0)) AS 数学,
SUM(IF(`subject`='英语',score,0)) AS 英语,
SUM(IF(`subject`='政治',score,0)) AS 政治,
SUM(score) AS TOTAL
FROM base_score
GROUP BY userid WITH ROLLUP;

列转行方法总结

环境准备:建表语句 + 初始化数据

CREATE TABLE base_score1(id INT(11) NOT NULL auto_increment,userid VARCHAR(20) NOT NULL COMMENT '用户id',cn_score DOUBLE COMMENT '语文成绩',math_score DOUBLE COMMENT '数学成绩',en_score DOUBLE COMMENT '英语成绩',po_score DOUBLE COMMENT '政治成绩',PRIMARY KEY(id)
)ENGINE = INNODB DEFAULT CHARSET = utf8;INSERT INTO base_score1(userid,cn_score,math_score,en_score,po_score) VALUES ('001',90,92,80,0);
INSERT INTO base_score1(userid,cn_score,math_score,en_score,po_score) VALUES ('002',88,90,75.5,0);
INSERT INTO base_score1(userid,cn_score,math_score,en_score,po_score) VALUES ('003',70,85,90,82);select * from  base_score1
SELECT userid,'语文' AS course,cn_score AS score FROM base_score1
UNION ALL
SELECT userid,'数学' AS course,math_score AS score FROM base_score1
UNION ALL
SELECT userid,'英语' AS course,en_score AS score FROM base_score1
UNION ALL
SELECT userid,'政治' AS course,po_score AS score FROM base_score1

拓展:UNION与UNION ALL的区别

  1. 对重复结果的处理:UNION会去掉重复记录,UNION ALL不会;

  1. 对排序的处理:UNION会排序,UNION ALL只是简单地将两个结果集合并;

  1. 效率方面的区别:因为UNION 会做去重和排序处理,因此效率比UNION ALL慢很多;

http://www.15wanjia.com/news/178378.html

相关文章:

  • 网站怎么做二级域名嘉兴路街道网站建设
  • 潍坊网站托管wordpress的文件权限
  • 滁州市网站建设科技公司做公司网站页面
  • 大朗做网站的高端网站定制的案例
  • 做企业网站所需要的资料总公司网站备案后 分公司网站还需要备案吗
  • 网站宣传的劣势c 能做网站
  • 创建众筹网站企业网站设计与建设
  • 个人网站的制作步骤深圳公司注册服务
  • 有没有高质量的网站都懂的桂林市天气预报15天
  • 自己可以做英文网站么社区做图网站有哪些内容
  • 如何让百度收录中文域名网站望牛墩镇网站建设公司
  • 旅游网站建设价格网站和网址的区别
  • 京东网站建设的目标python游戏编程入门
  • 跟我一起做网站 下载网销培训
  • 专业网站建设设计服务遵化网站建设
  • 北京网站备案拍照江苏省住房建设厅网站
  • 网站建设冖金手指花总十四免费企业建网站
  • 迅当网络外贸网站建设980网站开发者工具下载
  • 沈阳网站开发简维ui设计是什么职位
  • 中国纳溪门户网站建设项目环境影响电子商务网站前台建设常用的技术有
  • 开发网站公司推荐互联网软件有哪些
  • 网站域名注册人查询哈尔滨 房产网站建设
  • 百度网站推广费用多少钱亚马逊做deal的网站
  • 提供网站制作价格濮阳市网站建设
  • 帝国网站采集管理怎么做wordpress后台登陆地址
  • 华为公司电子商务网站建设策划书东莞市专注网站建设公司
  • 汉字域名的网站企业网站开发教学视频
  • 记事本做网站怎么调整图片间距网站建设技术优势
  • 5000人网站开发网络维护人员必备技能
  • 中关村在线官网入口淄博seo怎么选择