SQL/HQL 计数总计无法加入
SQL/HQL Count Total Not Working on Join
我正在使用一些简单的概率公式创建推荐系统。我正在使用 Hive 将 Million Song Dataset 大型数据集(189M 行和 3 列)与我的 Hadoop 集群一起使用。这是初始数据集的示例:
million_song - 初始数据集
user song play_count
c3fb2 SOXOQ 18
c3fb2 SOZVC 1
6041e SOBHN 3
6041e SOBXT 5
但首先我从初始数据集创建了一个 table,这里显示了一个示例:
million_both - 将同一用户收听的两首歌曲的出现次数相加
driver_song_id also_song_id play_count
SOXOQ SOBXT 1642
SOBHN SOBXT 2168
SOBXT SOZVC 1742
获取所有不同的用户(我希望这个值显示在最终输出第五列的所有行中)
select count(distinct users) from million_song;
# 139,738,054
我正在尝试将上面的这两个 table 加在一起,问题是我无法获得正确的 count_n_users,table 中的每一行都应该是相同的 # .这是我的代码:
select a.driver_song_id, a.also_song_id, a.play_count,
count(distinct b.user), sum(distinct b.user) as count_n_users
from (select driver_song_id, also_song_id, play_count from million_both) as a
join (select user, song, play_count from expp_team.million_song) as b
on a.driver_song_id = b.song
group by a.driver_song_id, a.also_song_id, a.play_count;
我无法得到正确的问题 count_n_users,截至目前它夸大了价值。
这是我希望输出的样子:
driver_song_id also_song_id play_count c(b.user) count_n_users
SOXOQ SOBXT 1643 463 139,738,054
SOBHN SOBXT 2168 483 139,738,054
SOBXT SOZVC 1742 725 139,738,054
如果查询当前返回除该列之外的所有正确输出,并且该列在结果集的所有行上都应具有相同的值,并且可以通过 运行 查询返回只计算来自 million_song
table 的所有不同用户,您可以添加一个 cross join
和获取该总计数的查询。这避免了您可能遇到的 group by
问题。
select a.driver_song_id,
a.also_song_id,
a.play_count,
count(distinct b.user),
c.count_n_users
from (select driver_song_id,
also_song_id,
play_count
from million_both) as a
join (select user,
song,
play_count
from expp_team.million_song) as b
on a.driver_song_id = b.song
cross join (select count(distinct users) as count_n_users from million_song) c
group by a.driver_song_id,
a.also_song_id,
a.play_count;
我正在使用一些简单的概率公式创建推荐系统。我正在使用 Hive 将 Million Song Dataset 大型数据集(189M 行和 3 列)与我的 Hadoop 集群一起使用。这是初始数据集的示例:
million_song - 初始数据集 user song play_count
c3fb2 SOXOQ 18
c3fb2 SOZVC 1
6041e SOBHN 3
6041e SOBXT 5
但首先我从初始数据集创建了一个 table,这里显示了一个示例:
million_both - 将同一用户收听的两首歌曲的出现次数相加 driver_song_id also_song_id play_count
SOXOQ SOBXT 1642
SOBHN SOBXT 2168
SOBXT SOZVC 1742
获取所有不同的用户(我希望这个值显示在最终输出第五列的所有行中)
select count(distinct users) from million_song;
# 139,738,054
我正在尝试将上面的这两个 table 加在一起,问题是我无法获得正确的 count_n_users,table 中的每一行都应该是相同的 # .这是我的代码:
select a.driver_song_id, a.also_song_id, a.play_count,
count(distinct b.user), sum(distinct b.user) as count_n_users
from (select driver_song_id, also_song_id, play_count from million_both) as a
join (select user, song, play_count from expp_team.million_song) as b
on a.driver_song_id = b.song
group by a.driver_song_id, a.also_song_id, a.play_count;
我无法得到正确的问题 count_n_users,截至目前它夸大了价值。
这是我希望输出的样子:
driver_song_id also_song_id play_count c(b.user) count_n_users
SOXOQ SOBXT 1643 463 139,738,054
SOBHN SOBXT 2168 483 139,738,054
SOBXT SOZVC 1742 725 139,738,054
如果查询当前返回除该列之外的所有正确输出,并且该列在结果集的所有行上都应具有相同的值,并且可以通过 运行 查询返回只计算来自 million_song
table 的所有不同用户,您可以添加一个 cross join
和获取该总计数的查询。这避免了您可能遇到的 group by
问题。
select a.driver_song_id,
a.also_song_id,
a.play_count,
count(distinct b.user),
c.count_n_users
from (select driver_song_id,
also_song_id,
play_count
from million_both) as a
join (select user,
song,
play_count
from expp_team.million_song) as b
on a.driver_song_id = b.song
cross join (select count(distinct users) as count_n_users from million_song) c
group by a.driver_song_id,
a.also_song_id,
a.play_count;