MySQL常用技巧
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的权限。
posted on 2020-05-21 18:09 aworkstory 阅读(147) 评论(0) 编辑 收藏 举报