zoukankan      html  css  js  c++  java
  • 在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=''

      帅~

  • 相关阅读:
    1052. 爱生气的书店老板
    766. 托普利茨矩阵
    643.子数组的最大平均数I
    450. 删除二叉搜索树中的节点
    1489.找到最小生成树里的关键边和伪关键边
    839相似字符串
    1631.最小体力消耗路径
    SnowFlake雪花算法源码分析&灵活改造,常见分布式ID生成解决方案
    【目标检测】三、Faster R-CNN与R-FCN
    【目标检测】二、Fast R-CNN与SVD
  • 原文地址:https://www.cnblogs.com/mc67/p/5052448.html
Copyright © 2011-2022 走看看