• 在GROUP BY中"做文章"(五种中简答方法!)


    被废话,直接上代码

    测试代码,数据如下:

    CREATE TABLE #T(
     TIMES VARCHAR(15),
     RESULT NVARCHAR(20) 
    )
    
    INSERT  INTO #T 
    SELECT  '2005-05-09',''
    UNION ALL
    SELECT '2005-05-09', ''
    UNION ALL
    SELECT '2005-05-09', ''
    UNION ALL
    SELECT '2005-05-09', ''
    UNION ALL
    SELECT '2005-05-10', ''
    UNION ALL
    SELECT '2005-05-10', ''
    UNION ALL
    SELECT '2005-05-10', ''

    要求结果:

           时间          胜  负
    2005-05-09      2  2
    2005-05-10      1  2

     方法一:CASE 的妙用

    --结果
    --CASE 里面做文章滴呀;
    --我艹尼玛;
    --CASE 用户group by 之后的逻辑判断滴呀;--好逻辑,尼玛case的妙用滴呀;
    
    SELECT TIMES,
     SUM(CASE WHEN RESULT='' THEN 1 ELSE 0 END) AS 胜,
     SUM(CASE WHEN RESULT='' THEN 1 ELSE 0 END) ASFROM #T
    GROUP BY TIMES

     方法二:共用表达式+COUNT()

    GO
    WITH A AS(
    SELECT TIMES,COUNT(*) AS WIN FROM #T
    WHERE RESULT=''
    GROUP BY TIMES
    ), B AS(
    SELECT TIMES,COUNT(*) AS LOSE FROM #T
    WHERE RESULT=''
    GROUP BY TIMES)
    
    SELECT AA.TIMES,AA.WIN,BB.LOSE FROM A AA INNER JOIN B BB
    ON AA.TIMES=BB.TIMES

     方法三:既然能够使用我们的共用表达式,那么自然能使用我们的临时表滴啦

     方法四:

      

      SELECT A.TIMES,A.WIN,B.LOSE FROM 
      (
       SELECT TIMES,COUNT(*) WIN FROM #T
       WHERE RESULT=''
       GROUP BY TIMES
      ) AS A,
      
      (
       SELECT TIMES,COUNT(*) LOSE FROM #T
       WHERE RESULT=''
       GROUP BY TIMES
      
      ) AS B
      
      WHERE A.TIMES=B.TIMES

     方法五:

       

     SELECT N.TIMES,N.WIN,M.LOSE FROM (
      (
        SELECT TIMES,COUNT(*) AS WIN FROM #T
        WHERE RESULT=''
        GROUP BY TIMES)N 
        INNER JOIN 
        (SELECT TIMES ,COUNT(*) AS LOSE FROM #T
        WHERE RESULT=''
        GROUP BY TIMES
        )M ON N.TIMES=M.TIMES
      
      )
      
      --中间的赛选条件也可以这样写滴呀
      --我艹尼玛
      SELECT TIMES,COUNT(*) as win  FROM #T
      GROUP BY TIMES,RESULT
      HAVING RESULT=''

      帅~

  • 相关阅读:
    windows 安装 make
    go lang AES 加密
    Microsoft .NET Framework 5.0
    Prometheus+Grafana+Alertmanager实现告警推送教程 ----- 图文详解
    ElasticSearch实战系列九: ELK日志系统介绍和安装
    1024快乐,加班使我快乐,福报如圣光醍醐灌顶!
    react-redux笔记
    (转)Vuex、Flux、Redux、Redux-saga、Dva、MobX
    React笔记
    SQLServer设置客户端使用IP地址登录
  • 原文地址:https://www.cnblogs.com/mc67/p/5052448.html
Copyright © 2020-2023  润新知