Mysql问题记录
1.limit分页运算
limit分页时不能在分页中做运算,所以可以这样写
SET @a=CONCAT('select a.* from (
SELECT
COUNT(1) OVER() AS count,
name,
weight
FROM
dwd_hospital_region_statistics
where type=2
) a order by a.weight desc limit ',(1-1)*5,',',5,'');
PREPARE texts FROM @a;
EXECUTE texts;
用concat拼接,然后再去运行。
这样就可以进行运算了,这个sql还有个计算count的功能,计算这个数据的总数。
当然,如果这样的话,在mybatis中默认时不能同时运行多条sql的,可以改一下配置
allowMultiQueries=true
如下图:
2.写死某个数据值
业务场景:为什么不用数据类型type,用1234表示不同的类型,因为前端需要可配置,页面上的具体name需要后端传过去,并且大部分地方是展示医废总量,只有这一处是医废收集量
写法:直接select '你想要的固定值' 字段 from 表名
select year(report_time) as date, sum(num) as num,'医废收集量' name from dwd_medical_waste where name = '医废总量' GROUP BY year(report_time)
结果是
3.数据存在则更新,不存在就新增
重点:判断数据存在还是不存在的那个字段要设置成unique索引
用ON DUPLICATE KEY
INSERT INTO student(id,value,name) VALUE(12,21,'小李') ON DUPLICATE KEY UPDATE name= '李四'
再次运行
4.field排序(可以将数据值根据你想要的顺序排序)
select year(report_time) as date,name ,sum(num) as num from dwd_medical_waste where name!='在线监测医废总数' GROUP BY name,year(report_time) order by year(report_time), field(name, '医废总量', '感染性医废', '药物性医废', '损伤性医废', '病理性医废', '化学性医废') asc;
5.预编译 PREPARE '预编译名' FROM sql、编译EXECUTE '预编译名';