实战项目中常用sql语句


    在实战项目中,要满足业务需求以达到项目要求,很多时候是可以用sql语句来解决问题的。(原则便是能把复杂的事情做得越简单越好~)在此,本人零零散散地记录在目前项目中一些常用sql语句。

1. 聚合函数

    也算是分组函数,在本人文章MySQL_数据之查询之中也做过相关的介绍

函数描述
AVG()返回值的平均值
SUM()返回值的总和
COUNT()返回结果集中的行数
MAX()返回最大值
MIN()返回最小值

2. MySQL日期函数

    其实很多时候,我们查询数据库是要跟时间进行关联,MySQL的日期函数用得也相对较多,之前在这里没少踩坑呀!

函数描述
NOW()返回当前日期和时间
CURDATE()返回当前日期
CURTIME()返回当前时间
DATE()提取时期或日期时间表达式的日期部分
DAY()返回月份中的一天(0-31)
MONTH()返回经过日期(0-12)的月份
YEAR()返回年份
DATE_FROMAT()以其他格式显示日期和时间值
DATE_ADD()将指定的时间值(或间隔)添加到日期值
DATE_SUB()从日期值中减去指定的时间值(或间隔)

注:这些函数返回的日期和时间是所运行数据库服务器实例的计算机的日期和时间。

3. 创建索引

    如果表格数据量非常的庞大,为了能基于一个或多个列的字段值来进行快速查询,我们通过创建索引来实现。打开Navicat,右键点击数据库中我们表的选项“设计表”,如下图所示中第二个选项就是添加索引的地方,可以给我们的索引字段取名,添加相关的索引类型和索引方法,添加完之后,查询数据的速度可以起飞,没用过的小伙伴可以试试看。
在这里插入图片描述

4. Order By

    单独放这里说明一下Order By是有原因的,因为是在项目中本人出现过一个问题,在实际设备数据中不会每时每刻都会产生数据,也就是说不一定每个字段对应的相同时间段内彼此都有数据。这样的数据缺失情况很常见,在项目中我们如果想展示一个固定的排序,很有可能会因为数据的缺失,没有数据的被有数据的顶上去,这样导致最终排序就混乱了。很有用的一招就可以解决这个问题,就是最好每个表都建立一个自增的主键id,最终在排序的时候根据Order by id 排序即可解决问题,很实用的一招,大伙可以试试看~~

5. 设备信息表 LEFT JOIN ON 数据表

    依旧是项目上出现过的问题,所以再重申一下“连接”操作。上面提过实际数据缺失问题很常见,那如果在数据表中某个时间段确实没有数据,那你压根就不知道它跑哪里去了,因为根本不存在。那么建立完备的设备信息表非常有必要了,设备信息表是事先我们手动添加的设备信息数据,设备信息不会缺失,它一直会存在,只要将我们的设备信息表作为我们的“左表”再去 LEFT JOIN ON 我们的数据表,那么即便是数据表没有数据,在最终查询之中没有数据的部分会以“null”值显示在结果中。我们可以通过sql的IFNULL()函数予以赋值,或者在我们的程序代码中赋值即可。

6. sql实例语句展示(MySQL)

    以上五点是在项目中常用的sql知识点,用基础的知识点结合在一块,都是可以写出解决问题的精简sql语句,以下是我将以上五点结合所写的一个demo,大家都到实际项目中实战练手吧!!!(得数据者得天下!)

SELECT
a.deviceId,
a.deviceName,
IFNULL(b.deviceIndex,1) 
FROM
{
SELECT
id,
device_id AS deviceId,
device_name AS deviceName
FROM
device_info
GROUP BY deviceId
} AS a 
LEFT JOIN
{
SELECT
curr_time AS currTime,
device_id AS deviceId,
device_index AS deviceIndex,
COUNT(device_index)
FROM
device_data
WHERE
YEAR(curr_time) = YEAR(NOW())
AND DATE_FORMAT( NOW( ), '%H:%i' ) < DATE_FORMAT( curr_time, '%H:%i' ) 
AND DATE_FORMAT( curr_time, '%H:%i' ) <= DATE_FORMAT(ADDDATE( NOW( ), INTERVAL 5 MINUTE ), '%H:%i' ) 
GROUP BY deviceId
} AS b ON a.deviceId = b.deviceId
ORDER BY a.id

     编写不易,路过的朋友,如果博客内容对你有所帮助的话,希望能一键三连一下呀,谢谢支持哦!!!
在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fish_Vast

您的打赏是对我最大的支持!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值