mysql常用函数及语句笔记

2022-04-27  本文已影响0人  编程放大镜

mysql中group by分组后查询无数据补0

MySQL对sum()字段进行条件筛选:having

显示按日期汇总且内数量大于10的记录。
SELECT date, count(*) as num FROM tbName GROUP BY date HAVING num>10;
在这里,我们不能用where来筛选超过10的记录,因为表中不存在这样一条记录。相反,having子句可以让我们筛选成组后的各组数据

count(if)

SELECT count(distinct(user_id) , COUNT(if(status=2,true,null)) as succ_num, COUNT(if(status=20,true,null)) as refund_num FORM trade
WHERE ctime>=unix_timestamp()-600;

常用SQL语句

# 创建表
CREATE TABLE tb_test (
id bigint(21) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
name varchar(100) NOT NULL DEFAULT '' COMMENT '名称',
id_card varchar(40) NOT NULL DEFAULT '' COMMENT '身份证号',
user_id int(11) unsigned NOT NULL DEFAULT '0' COMMENT '用户id',
create_time int(11) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',
is_del tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否禁用',
PRIMARY KEY (id),
KEY idx_user (name,user_id),
UNIQUE KEY `idx_id_card` (`id_card`),
KEY `idx_created` (`create_time`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='用户信息';

预估好数据将来的量,尽量往大理想,如使用 bigint 代替 int

查询昨天

from_unixtime(created, '%Y-%m-%d %H:%i:%s') >= adddate(curdate(), -1) and
from_unixtime(created, '%Y-%m-%d %H:%i:%s') < curdate()

复制表或数据结构

create table t1_copy as select * from t1 where 1=2

或者 create table t1_copy as select * from t1 limit 0

缺少t1表(源表)的索引信息而只有表结构相同。(如果要复制数据,去掉limit 0即可,也就是查询到的所有数据复制)

as 用来创建相同表结构并复制源表数据。
like 用来创建完整表结构和全部索引。

注意:两种方式在复制表的时候是不会复制权限对表的设置。比如说原本对表A做了权限设置,复制表AA后,表AA并不具备类似于表A的权限。

格式化unix时间戳

from_unixtime()
unix_timestamp()

建表语句

CREATE TABLE `article` (
    `art_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '文章id(自增)',
    `art_excerpt` varchar(500) NOT NULL DEFAULT '' COMMENT '摘录',
    `art_title` varchar(500) NOT NULL DEFAULT '' COMMENT '标题',
    `art_slug` varchar(300) NOT NULL DEFAULT '' COMMENT '固定连接(伪静态地址)',
    `art_content` text NOT NULL COMMENT '内容',
    `art_author` varchar(50) NOT NULL DEFAULT '' COMMENT '对应作者',
    `art_author_id` int(11) NOT NULL DEFAULT '0' COMMENT '对应作者ID',
    `art_status` varchar(30) NOT NULL DEFAULT '' COMMENT '文章状态(publish/auto-draft/inherit等)',
    `art_cate` varchar(50) NOT NULL DEFAULT '' COMMENT '分类',
    `art_tag` varchar(60) NOT NULL DEFAULT '' COMMENT '标签',
    `art_created` int(10) NOT NULL DEFAULT '0' COMMENT '文章发布时间',
  PRIMARY KEY (`art_id`),
  KEY `idx_author_id` (`art_author_id`),
  KEY `idx_slug` (`art_slug`),
  KEY `idx_tag` (`art_tag`),
  KEY `idx_cate` (`art_cate`),
  KEY `idx_created` (`art_created`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='文章表';

随机一条

select id,name from user where age>18 limit 1, $offset;

变量 $offset 取 rand(0, max_num-1) , max_num 可以放入缓存中

分支判断

SELECT id ,name, case type_id
WHEN 0 THEN 'php'
WHEN 1 THEN 'java'
else 'c' end as '计算机语言'
 FROM tb

长度判断

 SELECT * FROM tb WHERE length(app_type)>5

查询近7天

从昨天起往前推7天

SELECT * FROM tb where  
created >= unix_timestamp(DATE_SUB(CURDATE(), INTERVAL 7 DAY)) and 
created <= unix_timestamp(DATE_SUB(CURDATE(), INTERVAL 0 DAY))
上一篇下一篇

猜你喜欢

热点阅读