mysql通常使用语句_Mysql 常用SQL语句集锦

基础篇

//查询时间,友好提示

$sql = "select date_format(create_time, '%Y-%m-%d') as day from table_name";

//int 时间戳类型

$sql = "select from_unixtime(create_time, '%Y-%m-%d') as day from table_name";

//一个sql返回多个总数

$sql = "select count(*) all, " ;

$sql .= " count(case when status = 1 then status end) status_1_num, ";

$sql .= " count(case when status = 2 then status end) status_2_num ";

$sql .= " from table_name";

//Update Join / Delete Join

$sql = "update table_name_1 ";

$sql .= " inner join table_name_2 on table_name_1.id = table_name_2.uid ";

$sql .= " inner join table_name_3 on table_name_3.id = table_name_1.tid ";

$sql .= " set *** = *** ";

$sql .= " where *** ";

//delete join 同上。

//替换某字段的内容的语句

$sql = "update table_name set content = REPLACE(content, 'aaa', 'bbb') ";

$sql .= " where (content like '%aaa%')";

//获取表中某字段包含某字符串的数据

$sql = "SELECT * FROM `表名` WHERE LOCATE('关键字', 字段名) ";

//获取字段中的前4位

$sql = "SELECT SUBSTRING(字段名,1,4) FROM 表名 ";

//查找表中多余的重复记录

//单个字段

$sql = "select * from 表名 where 字段名 in ";

$sql .= "(select 字段名 from 表名 group by 字段名 having count(字段名) > 1 )";

//多个字段

$sql = "select * from 表名 别名 where (别名.字段1,别名.字段2) in ";

$sql .= "(select 字段1,字段2 from 表名 group by 字段1,字段2 having count(*) > 1 )";

//删除表中多余的重复记录(留id最小)

//单个字段

$sql = "delete from 表名 where 字段名 in ";

$sql .= "(select 字段名 from 表名 group by 字段名 having count(字段名) > 1)  ";

$sql .= "and 主键ID not in ";

$sql .= "(select min(主键ID) from 表名 group by 字段名 having count(字段名 )>1) ";

//多个字段

$sql = "delete from 表名 别名 where (别名.字段1,别名.字段2) in ";

$sql .= "(select 字段1,字段2 from 表名 group by 字段1,字段2 having count(*) > 1) ";

$sql .= "and 主键ID not in ";

$sql .= "(select min(主键ID) from 表名 group by 字段1,字段2 having count(*)>1) ";

业务篇

连续范围问题

//创建测试表

CREATE TABLE `test_number` (

`id` int(10) unsigned NOT NULL AUTO_INCREMENT,

`number` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '数字',

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

//创建测试数据

insert into test_number values(1,1);

insert into test_number values(2,2);

insert into test_number values(3,3);

insert into test_number values(4,5);

insert into test_number values(5,7);

insert into test_number values(6,8);

insert into test_number values(7,10);

insert into test_number values(8,11);

实验目标:求数字的连续范围。

根据上面的数据,应该得到的范围。

1-3

5-5

7-8

10-11

//执行Sql

select min(number) start_range,max(number) end_range

from

(

select number,rn,number-rn diff from

(

select number,@number:=@number+1 rn from test_number,(select @number:=0) as number

) b

) c group by diff;

a950139d0020d411e73752beb4ecd37c.png

签到问题

//创建参考表(模拟数据需要用到)

CREATE TABLE `test_nums` (

`id` int(11) unsigned NOT NULL AUTO_INCREMENT,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='参考表';

//模拟数据,插入 1-10000 连续数据.

//创建测试表

CREATE TABLE `test_sign_history` (

`id` int(10) unsigned NOT NULL AUTO_INCREMENT,

`uid` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '用户ID',

`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '签到时间',

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='签到历史表';

//创建测试数据

insert into test_sign_history(uid,create_time)

select ceil(rand()*10000),str_to_date('2016-12-11','%Y-%m-%d')+interval ceil(rand()*10000) minute

from test_nums where id<31;

//统计每天的每小时用户签到情况

select

h,

sum(case when create_time='2016-12-11' then c else 0 end) 11Sign,

sum(case when create_time='2016-12-12' then c else 0 end) 12Sign,

sum(case when create_time='2016-12-13' then c else 0 end) 13Sign,

sum(case when create_time='2016-12-14' then c else 0 end) 14Sign,

sum(case when create_time='2016-12-15' then c else 0 end) 15Sign,

sum(case when create_time='2016-12-16' then c else 0 end) 16Sign,

sum(case when create_time='2016-12-17' then c else 0 end) 17Sign

from

(

select

date_format(create_time,'%Y-%m-%d') create_time,

hour(create_time) h,

count(*) c

from test_sign_history

group by

date_format(create_time,'%Y-%m-%d'),

hour(create_time)

) a

group by h with rollup;

732e25c2c6ec820d70b23bc8e86145d7.png

//统计每天的每小时用户签到情况(当某个小时没有数据时,显示0)

select

h ,

sum(case when create_time='2016-12-11' then c else 0 end) 11Sign,

sum(case when create_time='2016-12-12' then c else 0 end) 12Sign,

sum(case when create_time='2016-12-13' then c else 0 end) 13Sign,

sum(case when create_time='2016-12-14' then c else 0 end) 14Sign,

sum(case when create_time='2016-12-15' then c else 0 end) 15Sign,

sum(case when create_time='2016-12-16' then c else 0 end) 16Sign,

sum(case when create_time='2016-12-17' then c else 0 end) 17Sign

from

(

select b.h h,c.create_time,c.c from

(

select id-1 h from test_nums where id<=24

) b

left join

(

select

date_format(create_time,'%Y-%m-%d') create_time,

hour(create_time) h,

count(*) c

from test_sign_history

group by

date_format(create_time,'%Y-%m-%d'),

hour(create_time)

) c on (b.h=c.h)

) a

group by h with rollup;

ceb826cc6255d4dba338fd191724d06a.png

//统计每天的用户签到数据和每天的增量数据

select

type,

sum(case when create_time='2016-12-11' then c else 0 end) 11Sign,

sum(case when create_time='2016-12-12' then c else 0 end) 12Sign,

sum(case when create_time='2016-12-13' then c else 0 end) 13Sign,

sum(case when create_time='2016-12-14' then c else 0 end) 14Sign,

sum(case when create_time='2016-12-15' then c else 0 end) 15Sign,

sum(case when create_time='2016-12-16' then c else 0 end) 16Sign,

sum(case when create_time='2016-12-17' then c else 0 end) 17Sign

from

(

select b.create_time,ifnull(b.c-c.c,0) c,'Increment' type from

(

select

date_format(create_time,'%Y-%m-%d') create_time,

count(*) c

from test_sign_history

group by

date_format(create_time,'%Y-%m-%d')

) b

left join

(

select

date_format(create_time,'%Y-%m-%d') create_time,

count(*) c

from test_sign_history

group by

date_format(create_time,'%Y-%m-%d')

) c on(b.create_time=c.create_time+ interval 1 day)

union all

select

date_format(create_time,'%Y-%m-%d') create_time,

count(*) c,

'Current'

from test_sign_history

group by

date_format(create_time,'%Y-%m-%d')

) a

group by type

order by case when type='Current' then 1 else 0 end desc;

6161a905ee270c5df97c8278987afd18.png

//模拟不同的用户签到了不同的天数

insert into test_sign_history(uid,create_time)

select uid,create_time + interval ceil(rand()*10) day from test_sign_history,test_nums

where test_nums.id <10 order by rand() limit 150;

//统计签到天数相同的用户数量

select

sum(case when day=1 then cn else 0 end) 1Day,

sum(case when day=2 then cn else 0 end) 2Day,

sum(case when day=3 then cn else 0 end) 3Day,

sum(case when day=4 then cn else 0 end) 4Day,

sum(case when day=5 then cn else 0 end) 5Day,

sum(case when day=6 then cn else 0 end) 6Day,

sum(case when day=7 then cn else 0 end) 7Day,

sum(case when day=8 then cn else 0 end) 8Day,

sum(case when day=9 then cn else 0 end) 9Day,

sum(case when day=10 then cn else 0 end) 10Day

from

(

select c day,count(*) cn

from

(

select uid,count(*) c from test_sign_history group by uid

) a

group by c

) b;

cb0013092120d17a259cf08daa5237a7.png

//统计每个用户的连续签到时间

select * from (

select d.*,

@ggid := @cggid,

@cggid := d.uid,

if(@ggid = @cggid, @grank := @grank + 1, @grank := 1) grank

from

(

select uid,min(c.create_time) begin_date ,max(c.create_time) end_date,count(*) count from

(

select

b.*,

@gid := @cgid,

@cgid := b.uid,

if(@gid = @cgid, @rank := @rank + 1, @rank := 1) rank,

b.diff-@rank flag from (

select

distinct

uid,

date_format(create_time,'%Y-%m-%d') create_time,

datediff(create_time,now()) diff

from test_sign_history order by uid,create_time

) b, (SELECT @gid := 1, @cgid := 1, @rank := 1) as a

) c group by uid,flag

order by uid,count(*) desc

) d,(SELECT @ggid := 1, @cggid := 1, @grank := 1) as e

)f

where grank=1;

b4bd426496764082311d9df0cd2ff20e.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452978.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么你需要设计和维护一套自我移动标准?

在一个很长的调研日的休息时分&#xff0c;我在同一个客户谈一个项目&#xff0c;在这个项目中&#xff0c;我正为一个全球经济公司开发一个iOS标准。他们的第一反应是这样的&#xff1a;“什么&#xff1f;你在开发Apple iOS以外的标准&#xff1f;那还要开发什么&#xff1f;…

JS 小知识点汇总

1.offsetWidth & width A:因为. 1.offsetWidth是只读属性&#xff0c;而style.width是可读写得。2.offsetWidth返回的是一个整数&#xff0c;style.width返回的是一个字符串,并且带有单位&#xff1b;**3.style.width只能返回以style方式定义的内部样式的width属性值。4.of…

django-redis中redis.conf配置详细说明

参考文献&#xff1a;https://blog.csdn.net/ljphilp/article/details/52934933 感谢楼主分享&#xff01;

初识Mysql(一)

1 搭建数据库服务器2 MYSQL数据类型3 修改表结构1 搭建数据库服务器1.1 存在mariadb时&#xff1a;#systemctl status mariadb#systemctl stop mariadb#rpm -e --nodeps mariadb-libs #不依赖关系卸载#rm -rf /etc/my.cnf#rm -rf /var/lib/mysql/*1.2 新安装时[rootser51 ~]# …

数据挖掘资料

https://blog.csdn.net/baimafujinji/article/details/53269040 在2006年12月召开的 IEEE 数据挖掘国际会议上&#xff08;ICDM&#xff0c; International Conference on Data Mining&#xff09;&#xff0c;与会的各位专家选出了当时的十大数据挖掘算法&#xff08; top 10 …

如何进行个人知识管理和提高自己能力?

21世纪是一个知识爆炸的世纪&#xff0c;知识爆炸是指人类创造的知识,主要是自然科学知识,在短时期内以极高的速度增长起来。是人们对当前大量出现并飞速发展的各种知识现象所进行的夸张和描述。有人综合计算,全世界的知识总量,七到十年翻一番。这就是风行全球的摩登名词的意思…

redis服务器端和客户端启动

服务器端 sudo redis-server /etc/redis/redis.conf 指定加载的配置文件 ps -ef|grep redis 查看redis服务器进程 sudo kill -9 pid 杀死redis服务器 连接特定IP的redis&#xff1a;

hive表移到mysql_如何将Hive数据表移动到MySql?

我想知道如何将日期从Hive转移到MySQL&#xff1f;我已经看到了如何将hive数据移动到Amazon DynamoDB而不是像MySQL这样的RDBMS的示例.以下是我在DynamoDB中看到的示例&#xff1a;CREATE EXTERNAL TABLE tbl1 ( name string, location string )STORED BY org.apache.hadoop.hi…

账簿与平衡段关联表

gl_ledger_norm_seg_vals转载于:https://www.cnblogs.com/lizicheng/p/8817982.html

超级丑数

题目&#xff1a; 写一个程序来找第 n 个超级丑数。超级丑数的定义是正整数并且所有的质数因子都在所给定的一个大小为 k 的质数集合内。比如给你 4 个质数的集合 [2, 7, 13, 19], 那么 [1, 2, 4, 7, 8, 13, 14, 16, 19, 26, 28, 32] 是前 12 个超级丑数。注意事项&#xff1a;…

为什么要进行个人知识管理(PKM)

21世纪是一个知识爆炸的世纪&#xff0c;知识爆炸是指人类创造的知识,主要是自然科学知识,在短时期内以极高的速度增长起来。是人们对当前大量出现并飞速发展的各种知识现象所进行的夸张和描述。有人综合计算,全世界的知识总量,七到十年翻一番。这就是风行全球的摩登名词的意思…

Python中“if __name__=='__main__':”理解与总结

具体详解参考文献&#xff1a;https://www.cnblogs.com/chenhuabin/p/10118199.html

python中列表如何比较大小_如何比较python中的列表/列表?

所以你想要两个项目列表之间的区别。 first_list = [[Test.doc, 1a1a1a, 1111], [Test2.doc, 2b2b2b, 2222], [Test3.doc, 3c3c3c, 3333]] secnd_list = [[Test.doc, 1a1a1a, 1111], [Test2.doc, 2b2b2b, 2222], [Test3.doc, 8p8p8p, 9999], [Test4.doc, 4d4d4d, 4444]] 首先,…

NFC读卡------ci522

1、NFC及卡片 NFC是近距离无线通讯技术&#xff0c;是一种非接触式识别和互联技术&#xff0c;可以在移动设备、消费类电子产品、PC和智能控件工具间进行近距离无线通信。NFC提供了一种简单、触控式的解决方案&#xff0c;可以让消费者简单直观地交换信息、访问内容与服务。 …

java基础面试题:说说和的区别

&与&&都是逻辑与 不同的是&左右两边的判断都要进行&#xff0c;而&&是短路与&#xff0c;当&&左边条件为假则不用再判断右边条件&#xff0c;所以效率更高 例如&#xff0c;对于if(str ! null && !str.equals(“”))表达式&#xff0c…

codeforce 457DIV2 C题

题意 你需要构造一个n个点m条边的无向有权图&#xff0c;要求这个图的MST中边权的和与从1到n的最短路长度都为素数 分析 可以想到这样一种贪心&#xff0c;在i到i1直接连一条边&#xff0c;这样最短路和MST都会是同样的一些边。只要保证他们的和为素数就好&#xff0c;对于其他…

何必言精通——十年杂感

30虚岁了。这一、两年&#xff0c;有事没事之中口中经常念着李商隐那首《锦瑟》&#xff1a; 锦瑟无端五十弦&#xff0c;一弦一柱思华年。庄生晓梦迷蝴蝶&#xff1b;望帝春心托杜鹃。沧海月明珠有泪&#xff1b;蓝田日暖玉生烟。此情可待成追忆&#xff0c;只是当时已惘然。…

mysql 索引效果是否叠加_MySQL基础实用知识集合(二)

上期小编给大家汇总介绍了mysql的6个基础的知识点,下面继续给大家分享一下另外7个知识点&#xff1a;7、什么是死锁&#xff1f;怎么解决&#xff1f;死锁&#xff1a;两个或多个事务相互占用了对方的锁&#xff0c;就会一直处于等待的状态。常见的解决死锁的方法&#xff1a;(…