针对性的mysql 查询统计

本文介绍了一种使用SQL查询技巧来统计角色完成任务数量的方法。通过巧妙地利用字符串处理函数,可以快速准确地计算出每个角色完成的任务数目。适用于一对多关系的数据表查询。

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

需求如下:

 human_m 表角色信息表:Human_m.id   human_m.name ...   task_m  表角色任务表: 关联human_m表ID    task_m.id , task_m.compleateTask          human_m 和task_m表是一对多的关系,即:一个角色对应多调任务表 数据

其中B表compleateTask 字段 格式如下:

23546,65489,87954,45658,69875,25588

要求:

查询每个角色名称,以及每个角色完成任务的个数,


SELECT 
  hh.`name`,
  SUM(LENGTH(REPLACE(tt.`completeTask`,',',',,')) - LENGTH(tt.completeTask)) num    //这里是亮点   思路:将原来的一个逗号替换为两个,那么减去原来的就是现在逗号个数。
FROM
  human_m hh 
  LEFT JOIN task_m tt 
    ON tt.`humanId` = hh.`id` 
    AND tt.`taskType` = 2 
WHERE hh.`level` > 50 
  AND hh.`robot` = 0
GROUP BY hh.`id` 
ORDER BY hh.`id` ASC 

### 使用 MySQL查询进行计数统计MySQL 中,子查询可以嵌套于 `SELECT`、`INSERT`、`UPDATE` 或 `DELETE` 语句中,并能与多种运算符一同工作。为了实现基于特定条件的记录数量统计,通常会采用如下结构: #### 基本语法模式 当目标是从某张中筛选出满足一定条件的数据并计算其总数时,可以通过内外两层查询完成此任务。外层负责最终的结果汇总,而内层则专注于数据的选择。 对于具体的计数需求,可利用 `COUNT(*)` 函数配合子查询达成目的。下面给出了一种典型的应用场景实例,即先通过内部查询定位到符合条件的具体条目集合,再由外部查询对该集合作总量上的评估。 ```sql SELECT COUNT(*) FROM ( SELECT * FROM orders WHERE status = 'shipped' ) AS shipped_orders; ``` 上述 SQL 片段展示了如何构建一个用于统计已发货订单数目 (`status='shipped'`) 的查询达式[^1]。这里的关键在于理解子查询作为临时格的角色,在此基础上应用聚集函数来进行进一步的操作。 另外一种常见情况涉及跨多张关联的信息检索和聚合处理。比如想要知道购买了指定产品 ID(`prod_id='RGAN01'`) 的客户人数,则可通过连接顾客信息(customer) 和订单详情(orderitems),并通过子查询限定所需的产品范围之后实施去重后的用户ID计数: ```sql SELECT COUNT(DISTINCT customer_id) FROM customers c JOIN orderitems oi ON c.customer_id = oi.customer_id WHERE oi.prod_id IN (SELECT prod_id FROM products WHERE product_name LIKE '%specific_product%'); ``` 这段代码片段说明了更复杂的业务逻辑下怎样运用子查询来获取精确统计数据的方法[^2]。值得注意的是,这里的 `IN` 运算符用来接收来自另一个查询产生的结果列,从而实现了间接性的匹配关系建立。 最后,如果目的是要针对不同维度做分类别的量化分析,那么还可以考虑引入分组机制(group by clause)[^4]。例如按照年份划分销售业绩分布状况: ```sql SELECT YEAR(order_date), COUNT(*) FROM orders o GROUP BY YEAR(o.order_date); ``` 以上例子体现了灵活组合基础组件以适应多样化应用场景的能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值