巧用数据库字段,一条sql查询特殊数据

本文介绍了一种使用MySQL 5.6版本进行复杂查询的方法,特别是如何在一个查询中同时获取不同类型订单的合计、最大值和最小值,利用乘法和除法技巧避免使用冗余的SQL语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先这是mysql,5.6版本的

订单有2种,一种type为1,一种type为2,我要查出type为1的和以及type为2的和还有type1的power最大值与power最小值(值都是非负)。 group by 电话 和 时间
要按照type区分数据然后取最大最小值,where上面要按照type区分??这样就得分情况了
NO!
我不要这样做,我要一条sql完成。把不要查的值可以通过乘法全部变成0,通过除法变成null。还不是美滋滋

type 为1的最大值
max((2-type)*power)

type为1的最小值

min(power/(2-type))

type为2的最大值

max(power*(type-1))

type 为2的最小值

min(power/(type -1))

其实除法能满足有负值的情况, X/0 在mysql里面就是null,所以max和min是没有null的记录的
但是除法在java里面不是一个很好的操作,浪费时间(即使不多)。所以mysql我也很保守, 能不用除法就不用把,我再去查查

但是还是存在一种很特殊的情况,当type1或者type2没数据的时候,min或者max肯定会记录下来另一种的数据,这个时候就要在java里面筛选一下了,type为1的最小值 min(power/(2-type)) 如果是null,那么就做你想要的操作(继续为null或者是操作一下默认值)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值