MySQL 零碎笔记

聚合函数的用法:

concat 连接单行记录的不同字段, group_concat 连接多行记录的相同字段, concat_ws

count 按条件统计:

SELECT COUNT(*) AS `num` GROUP BY `age` > 24  —— 可能需要建立临时表排序(没有对分组条件建立索引话),效率低

COUNT( CASE WHEN `age` >24 THEN 1 ELSE NULL END )

COUNT(if(pay_status=1, true, NULL))

SELECT COUNT(id>4 or null), COUNT(id=1 OR NULL) from test

同时作用于字段与条件

select COUNT(DISTINCT t1.questionId, t1.createTime > CURDATE() OR NULL ) newNumber FROM stu_errbook t1

 

group by 分组统计:

SELECT name, address, MAX(age) FROM t GROUP BY name 

这段 sql 可能成功,也可能报错。当 name 字段为主键或 unique not null 键,那么它会决定确定该行,因此 address 字段也被确定(依赖于分组字段)。否则的话,address 的值是randomness的,因此会拒绝此次查询( 只当 ONLY_FULL_GROUP_BY  开启 时, mysql 5.75 默认开启)。参考

 

mysql 随机数:

SELECT * FROM users WHERE userId >= ((SELECT MAX(userId) FROM users)-(SELECT MIN(userId) FROM users)) * RAND() + (SELECT MIN(userId) FROM users)  LIMIT 1

 

判断空值:

ifnull is null is not null

 

建立唯一索引, 并删除重复数据

alter ignore table user add unique index(user_id,user_name);

 

按字符串中的数字排序(默认是字典序)

方法一

SELECT 
      CAST(title AS UNSIGNED INTEGER) AS ORDER_FIELD
      ,title
ORDER BY
      ORDER_FIELD ASC

方法二

SELECT * FROM table ORDER BY LENGTH(title), title

  

按两个字段中的较大值排序(注意空值判断时返回 null)

select IF(t1.createTime > MAX(t4.lastLearnTime) || MAX(t4.lastLearnTime) IS NULL, t1.createTime, MAX(t4.lastLearnTime)) AS orderTime
from table1 t1, table4 t4
order by orderTime

 

233

 

posted on 2018-12-17 23:00  Lemo_wd  阅读(192)  评论(0编辑  收藏  举报

导航