MySQL按DB聚合提取用户总数超工单量的记录需求
解决思路与SQL实现
核心逻辑拆解
要实现需求,分两步执行即可:
- 筛选符合条件的DB:统计每个DB的用户总数,同时获取该DB对应的工单量(根据数据特征,同一DB的工单量一致,用聚合函数取值即可),筛选出用户总数大于工单量的DB。
- 关联原表获取目标记录:将原表与筛选出的DB统计结果关联,取出这些DB的所有记录,并附带该DB的总用户数。
具体SQL代码
方法一:使用CTE(可读性更强)
WITH db_stats AS ( SELECT DB, SUM(USERS) AS TOTAL_USERS, MAX(TICKETS) AS DB_TICKETS FROM APP_CONNECTIONS GROUP BY DB HAVING SUM(USERS) > DB_TICKETS ) SELECT ac.DB, ac.APP_NAME, ac.USERS, ac.TICKETS, ds.TOTAL_USERS FROM APP_CONNECTIONS ac JOIN db_stats ds ON ac.DB = ds.DB ORDER BY ac.DB, ac.APP_NAME;
方法二:使用子查询
SELECT ac.DB, ac.APP_NAME, ac.USERS, ac.TICKETS, ds.TOTAL_USERS FROM APP_CONNECTIONS ac INNER JOIN ( SELECT DB, SUM(USERS) AS TOTAL_USERS FROM APP_CONNECTIONS GROUP BY DB HAVING SUM(USERS) > (SELECT TICKETS FROM APP_CONNECTIONS WHERE DB = APP_CONNECTIONS.DB LIMIT 1) ) ds ON ac.DB = ds.DB ORDER BY ac.DB, ac.APP_NAME;
补充说明
- 代码基于「同一DB的
TICKETS值统一」的前提设计;如果存在同一DB对应不同工单量的场景,需调整筛选逻辑(比如判断总用户数大于每条记录自身的工单量)。 - 最终结果按DB和APP_NAME排序,与示例输出格式一致。
内容的提问来源于stack exchange,提问作者user2025149
相关产品推荐
相关产品推荐

