SQL-Join 2查询?
我有两个问题:SQL-Join 2查询?,sql,oracle,Sql,Oracle,我有两个问题: Select trunc(create_dtime) as Day, Count(Player_Id) as New_Users From Player Where Trunc(Create_Dtime) >= To_Date('2012-Jan-01','yyyy-mon-dd') Group By Trunc(Create_Dtime) 及 每天都有一个值,我希望将这两个查询连接在一起,因此我只有一个查询而不是两个查询。这只是一个内部连接,除非您希望在另一个查询中包含
Select trunc(create_dtime) as Day, Count(Player_Id) as New_Users
From Player
Where Trunc(Create_Dtime) >= To_Date('2012-Jan-01','yyyy-mon-dd')
Group By Trunc(Create_Dtime)
及
每天都有一个值,我希望将这两个查询连接在一起,因此我只有一个查询而不是两个查询。这只是一个内部连接,除非您希望在另一个查询中包含不匹配的结果。否则,您只需使用:
SELECT * FROM query1 INNER JOIN query2 ON query1.Day=query2.Day
我应该注意到这是MySQL的语法,我不知道你把它标记为Oracle。语法可能会相似,如果不完全相同的话,但我从未使用过Oracle。我知道了,只是忘了给列添加标签
Select one.Day, one.New_Users, two.Retained_Users
From
(
Select trunc(create_dtime) as Day, Count(Player_Id) as New_Users
From Player
Where Trunc(Create_Dtime) >= To_Date('2012-Jan-01','yyyy-mon-dd')
Group By Trunc(Create_Dtime)
) One
Inner Join
(
Select trunc(create_dtime) as Day,Count(Player_Id) as Retained_Users
From Player
Where Trunc(Create_Dtime) >= To_Date('2012-Jan-01','yyyy-mon-dd')
And Trunc(Init_Dtime) >= Trunc(Sysdate) - 7
Group By Trunc(Create_Dtime)
Order By Day Asc
) Two On One.Day=Two.Day
Order By 1
您不需要在那里加入:
SELECT
TRUNC(CREATE_DTIME) AS DAY,
COUNT(PLAYER_ID) AS NEW_USERS,
COUNT(CASE WHEN TRUNC(INIT_DTIME) >= TRUNC(SYSDATE) - 7 THEN PLAYER_ID ELSE NULL END) AS RETAINED_USERS
FROM PLAYER
WHERE TRUNC(CREATE_DTIME) >= TO_DATE('2012-Jan-01','yyyy-mon-dd')
GROUP BY TRUNC(CREATE_DTIME)
ORDER BY 1
为了得到您想要的结果集,您尝试了什么查询?表的结构是什么?要回答您的问题,您应该向我们展示您想要的是什么,然后查询一中有几天没有出现在查询二中,反之亦然。很抱歉,问题/答案不是很清楚。我想我已经处理好了。请你再投票好吗?
SELECT
TRUNC(CREATE_DTIME) AS DAY,
COUNT(PLAYER_ID) AS NEW_USERS,
COUNT(CASE WHEN TRUNC(INIT_DTIME) >= TRUNC(SYSDATE) - 7 THEN PLAYER_ID ELSE NULL END) AS RETAINED_USERS
FROM PLAYER
WHERE TRUNC(CREATE_DTIME) >= TO_DATE('2012-Jan-01','yyyy-mon-dd')
GROUP BY TRUNC(CREATE_DTIME)
ORDER BY 1