查找另一个表中存在的表中的行百分比?

时间:2016-06-14 13:20:11

标签: sql hive

我有以下表格:

Table A:

entryDate              memberID           course

每个memberID可以在同一天发生多次

2016-05-10      1192875         STAT-2294

2016-05-10      3292875         STAT-2294

2016-05-10      1192875         ENG-115

表B仅包含memberID

我正在寻找的是一种在给定日期找到表B中存在的表A中的memberID的百分比的方法。

这是我到目前为止所处的位置:

SELECT entryDate, 
       Count(CASE 
               WHEN tableA.memberID IN (SELECT memberID 
                                        FROM   tableB) THEN 1 
               ELSE 0 
             END) AS membership 
FROM   tableA 
WHERE  entryDate BETWEEN ‘2016-05-01’ AND ‘2016-05-15’ 
GROUP  BY entryDate; 

我试图将原始计数作为起点,但我收到以下错误

  

不支持的SubQuery Expression'memberID':当前SubQuery   表达式仅允许作为Where子句谓词

  • 我当前的查询有什么问题?
  • 如何获取TableB中TableA中存在的特定entryDate的行百分比?

TIA! -Craig

2 个答案:

答案 0 :(得分:6)

您可以使用event.dispatcher.default.consumers = versioning, search, browse, eperson, harvester 执行此操作。

exists

获取%条目

select count(*) 
from tableA a
where exists (select 1 from tableB b where a.memberID = b.memberID)
and entryDate BETWEEN '20160501' AND '20160515'

编辑:Hive不支持相关的子查询,可以使用select 100.0 * count(*) / (select count(*) from tableA a where exists (select 1 from tableB b where a.memberID = b.memberID) and entryDate BETWEEN '20160501' AND '20160515') from tableA where entryDate BETWEEN '20160501' AND '20160515' 来完成。

left join

答案 1 :(得分:4)

我认为count($ids)是最简单的方法。假设LEFT JOIN没有重复:

tableB