在oracle数据库中,工单表tbl_gddb存在以下字段:ID(唯一标识),ORDER_ID(工单编号),HANDEL_TIME(受理时间),MESSAGE_SLR(受理人),YWLX(业务类型),ISEND(是否办结)。现要写一个sql语句,统计业务类型包含“业务咨询”的每个受理人处理已办结工单的数量?
SELECT COUNT(TBL.ID),TBL.MESSAGE_SLR FROM tbl_gddb TBL ,(SELECT MESSAGE_SLR FROM tbl_gddb WHERE YWLX = "业务咨询")t WHERE TBL.MESSAGE_SLR = t.MESSAGE_SLR AND TBL.ISEND = "已办结"
SELECT COUNT(1) FROM tbl_gddb WHERE MESSAGE_SLR IN (SELECT DISTINCT(MESSAGE_SLR) FROM tbl_gddb WHERE YWLX = "业务咨询") AND ISEND='已办结' GROUP BY MESSAGE_SLR
select YWLX,MESSAGE_SLR, count(ORDER_ID),ISEND from (select YWLX,MESSAGE_SLR,ISEND,ORDER_ID from tbl_gddb where YWLX = '业务咨询' and ISEND=1) as a group by YWLX,ISEND,MESSAGE_SLR
-- 子查询使用 DISTINCT 对 受理人 去重
SELECT a.YWLX,
a.MESSAGE_SLR,
COUNT(a.ID)
FROM tbl_gddb a
WHERE a.MESSAGE_SLR IN (
SELECT DISTINCT b.MESSAGE_SLR
FROM tbl_gddb b
WHERE b.YWLX = '业务咨询'
)
AND a.ISEND = '已办结'
GROUP BY a.YWLX, a.MESSAGE_SLR
ORDER BY a.MESSAGE_SLR, a.YWLX
;
-- 或 使用 ANY 取满足的任意一条记录
SELECT a.YWLX,
a.MESSAGE_SLR,
COUNT(a.ID)
FROM tbl_gddb a
WHERE a.MESSAGE_SLR = ANY(
SELECT b.MESSAGE_SLR
FROM tbl_gddb b
WHERE b.YWLX = '业务咨询'
)
AND a.ISEND = '已办结'
GROUP BY a.YWLX, a.MESSAGE_SLR
ORDER BY a.MESSAGE_SLR, a.YWLX
;
select MESSAGE_SLR, count(1) as '已办结工单量'
from (select ORDER_ID,MESSAGE_SLR, YWLX, ISEND
from tbl_gddb
where YWLX = '业务咨询'
and ISEND = '已办结') a --业务类型含“业务咨询”的已办结工单总量
group by MESSAGE_SLR
```
select MESSAGE_SLR,count(1) from tbl_gddb where YWLX like '%业务咨询%' and ISEND = '已办结' group by MESSAGE_SLR
YWLX(业务类型),ISEND(是否办结) 这两个字段 再求count
```sql
SELECT
count( ID ) AS '已办结工单的数量',
MESSAGE_SLR AS '受理人'
WHERE
YWLX = '业务咨询'
AND ISEND = '已办结'
GROUP BY
MESSAGE_SLR
sql解析: 以受理人分组统计, 业务类型为业务咨询并且状态是已办结的, 工单数量, where后面是伪代码, 可以以数据库实际状态修改
```