求大佬解答,这种 sql 应该怎么写?

一张表table1吧里面有30W数据,字段为id bigint(20),full_name varchar(66) age tinyint(3),code varchar(6) gender tinyint(1)
要展示符合下面这些条件的记录:

如果年龄大于1岁,code在(P00-P96)这个范围内,则认为存在零概率事件-年龄与原因存在逻辑错误。
如果年龄在15-55岁以外,并为女性,code在(O00-O99)这个范围内,则认为存在零概率事件-年龄与原因存在逻辑错误
如果年龄在15岁以下,code在(C11)、C15)、(C16)、C18-C21)、(C22)、(C33-C34)、(C67)访问内,则认为存在零概率事件-年龄与原因存在逻辑错误
如果年龄在5岁以下,code在(I05-I09)范围内,则认为存在零概率事件-年龄与原因存在逻辑错误

这种sql我应该怎么写?想了半天,只想出了一个最笨的方法
`
SELECT * FROM table1 WHERE (age>1 AND age<5 AND code IN('P00','P01','I05','I09')) OR (age>=5 AND age<15 AND code IN('C11','C15','C67') OR (age>=15 and age<55 AND gender=0 AN code IN('O00','O99')))`

这样,我感觉这样不行呀,求大神们给一个牛逼一点的答案吧,谢谢啦

阅读 1.4k
1 个回答

这种需求感觉用sql的话差不多也只能这样了,30W的数据量不大,在索引方面优化一下性能应该还可以,可以建个age,code的联合索引,再用explain分析一下试试

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题