复盘一下前两天MySQL的一道笔试题.
建表语句为:
这是典型的行转列操作.方法有以下两种:
注意:max() 是为了能够使用 group by 根据 id 进行分组,因为每一个 id 对应的course = '语文' 的记录只有一条,所以 max() 的值就等于对应那一条记录的 score 的值. 所以呢sum()、min()、avg()等聚合函数都可以达到行转列的效果.
若要实现对每一列也求和,可以使用with rollup直接生成结果.
MySQL的排序,使用order by来实现.
order by id asc,表示用id升序排列
order by id desc,表示用id降序排列
当需要用多个字段排序时,order by cdate desc,id asc,表示先用cdate降序排列,cdate相同的再用id升序排列
把name放在前面就是优先给name排序,name一样的就按后面的desc排序.
这个句子就能满足你的要求.
不知道这句话什么意思.不过对你想要的结果没有什么影响.
另外,列名不要用desc.desc 是数据库中的一个关键字.原则上最好不要用来做列名.
------------------------补充-----------------------
满足你的第三个条件也很容易,
group by name,desc 变成
group by name,count(desc)就可以了
ORDER BY 默认按升序排列,所以呢 ASC (升序)子句是可选的.
另外,还可以按降序排列,为此可以使用 DESC(降序).
按从左到右的顺序依次根据 ORDER BY 子句中指定的列进行排序.
指定用于排序的列时,如果使用的是 SELECT 子句中列的数字位置,那么指定的数字不能超过 SELECT 子句中指定的列数.( 不能超出索引 )
通常,可以按 SELECT 子句中未指定的列进行排序,但必须指定列名.然而,如果在查询中使用了GROUP BY 或 DISTINCT 子句,就不能按SELECT 子句中未指定的列进行排序.
要求:显示部门编号为 10 的员工的姓名、职位和薪水,并根据薪水按从低到高的顺序排列想获得上面这样的数据结果
如果想对表中多个字段进行不同的排列如工资表按照升序排列,年龄按照降序排列
可以再ORDER之后用逗号隔开不同排列的字段
就是一个动态的行列转换
CREATE TABLE +c_wssb_zz+ (
+aa011+ varchar(10) default NULL,
)
试下这个:
select etimattendancelistid,
max(case when etimkaoqinfanwei='上午上班' then etimkaoqinzhuangtai else '' end) As '上午上班',
max(case when etimkaoqinfanwei='下午上班' then etimkaoqinzhuangtai else '' end) As '下午上班'
From kaoqin group By etimattendancelistid
以上就是土嘎嘎小编为大家整理的mysql行转列怎么排序相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!