zoukankan      html  css  js  c++  java
  • 八、子查询实践

    一、根据字用户查询操作的数据统计父用户的总和

    查询a表的 name为 test1  test2   test3 用户的所有子用户 ,子用户去查询 b表的所有数据 , 并统计 test1  test2  test3  三个用户的总和。

     
    SELECT COUNT(*)   FROM Tbl_Loan WHERE Status = '待下户' AND HouseArea IN ('中环内', '中环外', '')   --运行这条是128条
    and AgentUser IN(  --这里子查询是所有用户  65条
    SELECT
        AdminName
    FROM
        Tbl_Admin
    WHERE
        CreateUser IN ('zl030', 'zl042', 'zl046') 
    ) GROUP BY CreateUser
    --这个语句查询 76条      --但是 没有办法分组 ('zl030', 'zl042', 'zl046') 
    
    
    SELECT COUNT(*),b.CreateUser FROM Tbl_Loan a inner join Tbl_Admin b ON a.AgentUser=b.AdminName  where a.Status = '待下户' AND a.HouseArea IN ('中环内', '中环外', '')   --运行这条是128条
    and  b.CreateUser IN ('zl030', 'zl042', 'zl046')
    GROUP BY b.CreateUser 
    
    --通过name 
    SELECT COUNT(*),c.AdminNickName FROM Tbl_Loan a inner join Tbl_Admin b ON a.AgentUser=b.AdminName  inner join Tbl_Admin c ON b.CreateUser=c.AdminName  where a.Status = '待下户' AND a.HouseArea IN ('中环内', '中环外', '')   --运行这条是128条
    and  c.AdminNickName IN ('冯冬君', '钱佳华', '王鑫') AND c.LimitName LIKE '%业务%' 
    GROUP BY c.AdminNickName
    
    
    
    select *,
    (select count(*) from tbl_loan where AgentUser in(select adminname from Tbl_Account where CreateUser='zl030') and year(adddate)=yeartime and month(adddate)=monthtime) as sd1,
    (select count(*) from tbl_loan where CreateUser='zl042' and year(adddate)=yeartime and month(adddate)=monthtime) as sd2,
    (select count(*) from tbl_loan where CreateUser='zl046' and year(adddate)=yeartime and month(adddate)=monthtime) as sd3
     from (select max(year(AddDate)) as yeartime,max(month(AddDate)) as monthtime from tbl_loan loan where DealFlag=0 and year(AddDate)=2019 group by year(AddDate),month(AddDate)) ss

    二、统计和分析

    SELECT
        a.ID,b.Status  --这个会对status 也分组
    FROM
        Tbl_Admin a
    LEFT JOIN Tbl_Loan b ON a.AdminName = b.RiskCtrlUser
    WHERE
        a.LimitName = '风控助理'
    AND a.DealFlag = 0
    AND b.DealFlag = 0
    GROUP BY a.ID,b.Status 
    
    --为了解决*查询 -采用子查询//子查询也解决不了*查询 但是这种事另一种写法
    select * FROM  Tbl_Loan where RiskCtrlUser IN (select AdminName from Tbl_Admin where LimitName = '风控助理') 

     解决方案,查询出来 linq 分组 new 一个对象查询数据 最终没实现换一种方案解决

    此解决方案

    select * from Tbl_Loan where  RiskCtrlUser IN(select Adminname from Tbl_Admin WHERE limitName='风控助理') 
    
    select * ,
    (SELECT count(*) from Tbl_Loan WHERE RiskCtrlUser =a.Adminname ) as 总计
    FROM  --from 是关键
    (select Adminname from Tbl_Admin WHERE limitName='风控助理') as a
    

      

     最终解决方案

    select * from Tbl_Loan where  RiskCtrlUser IN(select Adminname from Tbl_Admin WHERE limitName='风控助理') 
    
    
    select * ,
    
    (SELECT count(*)from Tbl_Loan WHERE RiskCtrlUser =a.Adminname ) as '总计',
    (SELECT count(*) from Tbl_Loan WHERE RiskCtrlUser =a.Adminname AND Status='已下户' ) as 已下户,
    (SELECT count(*) from Tbl_Loan WHERE RiskCtrlUser =a.Adminname AND Status='已签约' ) as 已签约,
    (SELECT count(*) from Tbl_Loan WHERE RiskCtrlUser =a.Adminname AND Status='拒绝' ) as 拒绝,
    (SELECT count(*) from Tbl_Loan WHERE RiskCtrlUser =a.Adminname AND HouseArea='中环内' ) as 中环内,
    (SELECT count(*) from Tbl_Loan WHERE RiskCtrlUser =a.Adminname AND HouseArea='中环外' ) as 中环外
    
    FROM  --from 是关键 (该被必须大量这种方式查询,没有办法获取*内其他字段)
    (select Adminname from Tbl_Admin WHERE limitName='风控助理') as a

     

    三、统计和分析

    select 
    a.LoanNo AS '编号',A.City '城市',a.AddDate '进件时间',a.ProductName '产品大纲',a.BitType '抵押类型',a.PersonName '借款人姓名',a.MoneyOther '房屋估价'
    ,a.ExpectedMoney '意向金',a.MoneyCredit AS '授权金额',a.MoneyReal AS '放款金额'
    ,a.AgentUser '进件渠道(子集)',a.CreateUser '业务专员',a.HouseUser '下户专员',a.RiskCtrlUser '风控助理',a.CheckUser '中后台助理'
    ,a.HouseArea '所在区域'
    ,b.CreateUser '业务主管'
    ,c.IsOverTime '加班费'
    ,d.TotalAmount '下户费'
    
    from Tbl_Loan a  
    LEFT  JOIN Tbl_Admin b ON a.CreateUser = b.AdminName --单独表查询业务主管即业务人员的创建者
    LEFT  JOIN Tbl_Pay c ON a.LoanNo=c.LoanNo  AND c.IsOverTime=1  --
    LEFT JOIN Tbl_Pay d ON a.LoanNo=d.LoanNo AND d.TradeSubject='服务费'  GROUP BY 
    
     a.LoanNo,A.City ,a.AddDate ,a.ProductName ,a.BitType ,a.PersonName ,a.MoneyOther 
    ,a.ExpectedMoney ,a.MoneyCredit,a.MoneyReal 
    ,a.AgentUser ,a.CreateUser,a.HouseUser ,a.RiskCtrlUser ,a.CheckUser 
    ,a.HouseArea
    ,b.CreateUser 
    ,c.IsOverTime 
    ,d.TotalAmount
    
    
    select count(*) from Tbl_Loan  --2201条

    最终解决

    (select CreateUser from tbl_admin where AdminName = a.AgentUser) as YeWuZhuanYuan
    ,('冯东君') as YeWuZhuGuan
    ,('江威') as RiskZhuGuan
    ,('洪文') as CheckZhuGuan
    ,(select top 1 TotalAmount from tbl_pay where LoanNo = a.LoanNo) as HouseMoney
    ,(select top 1 300 from tbl_pay where LoanNo = a.LoanNo and IsOverTime = 1) as HouseMoneyElsefrom FROM tbl_loan a 
    
    
    select id,city,adddate,ProductName,BitType,PersonName,MoneyOther,ExpectedMoney,MoneyCredit,MoneyReal,AgentUser,HouseUser,RiskCtrlUser,CheckUser,HouseArea,Status,2163 as RecordNum,
    (select AdminNickName from tbl_admin where AdminName = a.AgentUser) as QuDaoNickName, --进件渠道昵称 焦点账号
    (select AdminNickName from tbl_admin where AdminName = a.CreateUser) as JinJianNickName, --进件用户昵称 焦点手机号
    
    (select top 1 AdminNickName from tbl_admin where AdminName = (select CreateUser from tbl_admin where AdminName = a.AgentUser) )as YeWuZhuanYuanNickName
    
    ,('冯东君') as YeWuZhuGuan  --固定列的值
    ,('江威') as RiskZhuGuan
    ,('洪文') as CheckZhuGuan
    ,(select top 1 TotalAmount from tbl_pay where LoanNo = a.LoanNo) as HouseMoney
    ,(select top 1 300 from tbl_pay where LoanNo = a.LoanNo and IsOverTime = 1) as HouseMoneyElsefrom FROM tbl_loan a where --满足IsOverTime=1 则显示300  

    当需要通过渠道昵称查询的时候,需要查询渠道的AgentUser,你前端option选择该字段需要后台判断单独处理,根据昵称查询渠道账号,在Loan表的AgentUser进行限制即可。

      

  • 相关阅读:
    sipp如何避免dead call
    6174问题
    笨小熊
    scanf 与 cin 的区别
    谁获得了最高奖学金
    _int64、long long 的区别
    小光棍数
    简单排序法
    La=LaULb (循环链表)
    删除重复的数(顺序有序表)
  • 原文地址:https://www.cnblogs.com/fger/p/10956482.html
Copyright © 2011-2022 走看看