mysql用法进阶

1.按中文拼音排序:

表中中文为utf8编码,先转成gbk。

select name from table_name order by convert(name using gbk) asc

2.多行转多列:

参考文献:http://www.cnblogs.com/small8/p/6211009.html

例如要行转列的字段为subject(学科),要赋值的字段score(成绩),为可以通过如下方式转换:

select  name,
MAX(CASE subject when '语文' THEN score ELSE 0 END) '语文',
           MAX(CASE subject when '数学' THEN score ELSE 0 END) '数学',
           MAX(CASE subject when '英语' THEN score ELSE 0 END) '英语'
from exam_result
group by name

3.分组内编序号

题目:假设表table_1的字段为group_name,log_time,field_name1,field_name2。需求是想取每个group_name中log_time最小的记录。

实现方法:用变量记录上次的分组的值,如果相同,则计数+1,否则重新计数

SQL如下:

select group_name,log_time,field_name1
from
(
select group_name,log_time,field_name1, 
(@index:=CASE WHEN @last_group_name=group_name THEN @index+1 ELSE 1 END) record_index,(@last_group_name=group_name) last_group_name 
from 
(
select * 
from table_1 
order by group_name,log_time
)A,
(
select @index:=1,@last_group_name=''
)B
)C where record_index=1
4.生成序列
参考文献:http://yuanding.us/miscellany/4806/
例如生成上周的日期序列:
select sequence_date
from 
(
select subdate(curdate(),t.i) sequence_date
from 
(
select 1 i union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9 union select 10 union select 11 union select 12 union select 13 union select 14
)t
)date_list
where yearweek(sequence_date,1)=yearweek(DATE_SUB(now(),INTERVAL 7 DAY),1) 
order by sequence_date

注意:判断上周日期的地方按下面写才不会有跨年的BUG:

yearweek(sequence_date,1)=yearweek(DATE_SUB(now(),INTERVAL 7 DAY),1) 

5.按分隔符取子串

例如,原始字符串格式如下:

1.2.3.456

目标是取出1.2.3

实现方式: substring_index('2.3.0.456','.',3)

6.多个select结果拼接:

select  * from a
union select * from b

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏lgp20151222

MySQL使用判断

在第一个方案的返回结果中, value=compare-value。而第二个方案的返回结果是第一种情况的真实结果。如果没有匹配的结果值,则返回结果为ELSE后的...

1132
来自专栏我的博客

数据库原理与应用【实验报告】

实验一 数据库管理系统软件的使用 一、实验目的 (1)认识几种常见的数据库管理系统,熟悉它们的使用界面; (2)熟练掌握建立数据库和表,向数据库输入数据、修改数...

6897
来自专栏飞总聊IT

总结一下SQL NULL吧

这篇文章主要回答网友姜锐(森原)。 网上并没有太好的文章总结NULL,比较有效的办法是自己去读SQL标准了。通常SQL98最重要。 我总结一下NULL在标准里...

32011
来自专栏james大数据架构

你真的会玩SQL吗?让人晕头转向的三值逻辑

你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接、外连接 你真的会玩SQL吗?三范式、数据完整性 你真...

1898
来自专栏java系列博客

Oracle使用对象类型3(MEMBER方法的对象类型)

2194
来自专栏Java后端生活

MySQL(四)DQL之条件查询

1729
来自专栏栗霖积跬步之旅

第五章:排序检索数据

表名:products 字段:product_id、product_name、product_price、vend_id(供应商) 根据数据库设计理论,如...

1867
来自专栏Jackson0714

详解SQL集合运算

3768
来自专栏Java成神之路

Oracle学习笔记_05_分组函数

group by 增强:rollup      cube     grouping      grouping set

1212
来自专栏小白安全

小白博客 MySQL日期时间函数大全

DAYOFWEEK(date) 返回日期date是星期几(1=星期天,2=星期一,……7=星期六,ODBC标准) mysql> select DAYOFWEE...

29910

扫码关注云+社区