首页 > 其他 > 详细

分组后 排除存在某种情况的 的查询

时间:2021-07-22 16:47:10      阅读:9      评论:0      收藏:0      [点我收藏+]

上午,公司运维问我一个查询问题,给他整的抓耳挠腮,虽然能实现,但是查询效率不敢恭维就来问我了。

场景模拟

社区进行了普调,统计了社区中各位业主的(A、B、C)工具情况,如下

业主名称 工具类型
张三 A
张三 B
张三 C
李四 B
李四 A
王五 B
赵六 A
孙七 B
周八 B
周八 A
吴九 A
吴九 C

社区领导要统计没有 C工具的业主名称

解决方式

自然会想到差集,先查询到有该工具的,然后再排除掉这些里面有其他工具的。这样会用到 not ! 此类运算符,自然效率差的爆。那怎么解决呢?转念想一下,就想到了 case搜索函数

预设表名: table
业主名称:owner
工具:tool


SELECT * FROM (
 SELECT `owner`, MAX( CASE WHEN tool =‘C‘ THEN 1 ELSE 0 END ) AS `only_tool` FROM table GROUP BY `owner`
 ) t WHERE  t.`only_tool` = 1

后续这个 MAX 可以看情况处理,比如没有两样的 就可以 继续使用CASE搜索函数并用 IN 或者 EXISTS来解决。

分组后 排除存在某种情况的 的查询

原文:https://www.cnblogs.com/akashicbrother/p/15043450.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!