【问题标题】:SQL- Oracle Grouping results rowsSQL-Oracle 分组结果行
【发布时间】:2012-09-18 18:22:11
【问题描述】:

下面的查询:

Select
trunc(create_dtime) as Day,count(create_dtime) as DLs
From Player_Tapjoy
Where
Trunc(Create_Dtime) >= To_Date('2012-sep-01','yyyy-mon-dd')
And Trunc(Create_Dtime) < To_Date('2012-sep-03','yyyy-mon-dd')
Group by trunc(create_dtime)
Union All
Select trunc(create_dtime) as Day,
Count(Create_Dtime) As DLs
From Player_aux_pt
Where
Site = 'AppCircle' And
Trunc(Create_Dtime) >= To_Date('2012-sep-01','yyyy-mon-dd')
And Trunc(Create_Dtime) < To_Date('2012-sep-03','yyyy-mon-dd')
Group By Trunc(Create_Dtime)

给我以下结果:

   Day           DLs
02-Sep-12        6920
01-Sep-12        6630
02-Sep-12        3009
01-Sep-12        3637

我怎样才能将这些组合起来,以便每天只有一行,并且顺序正确?

【问题讨论】:

  • 我的眼睛被那个压痕流血了。
  • @Roger 我不明白你的意思。我的查询太长而无用?
  • 他的意思是他不喜欢你格式化代码的方式,很难看出这两个查询之间的区别。有关一些常用的 SQL 格式化标准,请参阅此问题 (stackoverflow.com/questions/519876/sql-formatting-standards)

标签: sql oracle


【解决方案1】:
WITH
PTJ AS
(
    SELECT
      TRUNC(CREATE_DTIME) AS DAY,
      COUNT(CREATE_DTIME) AS DLS
    FROM PLAYER_TAPJOY
    WHERE TRUNC(CREATE_DTIME) >= TO_DATE('2012-sep-01', 'yyyy-mon-dd')
    AND   TRUNC(CREATE_DTIME) < TO_DATE('2012-sep-03', 'yyyy-mon-dd')
    GROUP BY TRUNC(CREATE_DTIME)
),
PAP AS
(
    SELECT
      TRUNC(CREATE_DTIME) AS DAY,
      COUNT(CREATE_DTIME) AS DLS
    FROM PLAYER_AUX_PT
    WHERE SITE = 'AppCircle'
    AND   TRUNC(CREATE_DTIME) >= TO_DATE('2012-sep-01', 'yyyy-mon-dd')
    AND   TRUNC(CREATE_DTIME) < TO_DATE('2012-sep-03', 'yyyy-mon-dd')
    GROUP BY TRUNC(CREATE_DTIME)
)
SELECT
  COALESCE(PTJ.DAY, PAP.DAY) AS DAY,
  PTJ.DLS AS PTJ_DLS,
  PAP.DLS AS PAP_DLS,
  COALESCE(PTJ.DLS, 0) + COALESCE(PAP.DLS, 0) TOTAL_DLS
FROM PTJ
FULL OUTER JOIN PAP
ON PTJ.DAY = PAP.DAY
ORDER BY COALESCE(PTJ.DAY, PAP.DAY)

【讨论】:

    【解决方案2】:
    select day,sum(DLs) as Tot_DLs
    From
    (
    Select
     trunc(create_dtime) as Day,count(create_dtime) as DLs
      From Player_Tapjoy
     Where
     Trunc(Create_Dtime) >= To_Date('2012-sep-01','yyyy-mon-dd')
       And Trunc(Create_Dtime) < To_Date('2012-sep-03','yyyy-mon-dd')
       Group by trunc(create_dtime)
      Union All
     Select trunc(create_dtime) as Day,
      Count(Create_Dtime) As DLs
      From Player_aux_pt
        Where
      Site = 'AppCircle' And
       Trunc(Create_Dtime) >= To_Date('2012-sep-01','yyyy-mon-dd')
        And Trunc(Create_Dtime) < To_Date('2012-sep-03','yyyy-mon-dd')
       Group By Trunc(Create_Dtime)
        )
       Group By Day
       Order By Day Asc
    

    ;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-30
      • 2021-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多