我有以下表格:
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子句谓词
TIA! -Craig
答案 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