0

我正在使用 SparkSQL

spark.sql("""
        SELECT artist, count(distinct(song))
        FROM user_log_table WHERE artist =
       (SELECT artist
        FROM user_log_table
        GROUP BY artist
        ORDER BY count(artist) DESC
        LIMIT 1 )        
""").show()

这是我的查询,我只运行了子查询,它给了我一个我正在寻找的值,然后我想在 where 子句中使用该值,但我得到了错误

调用 o22.sql 时出错。:org.apache.spark.sql.AnalysisException:分组表达式序列为空,并且'user_log_table.`artist`'不是聚合函数。在窗口函数中包装 '(count(DISTINCT user_log_table.`song`) AS `count(DISTINCT song)`)' 或在 first() (或 first_value)中包装 'user_log_table.`artist`' 如果你不这样做关心你得到的价值。;;

4

1 回答 1

1

您想要具有最大日志条目的一位艺术家的歌曲计数。如果有两位艺术家的日志条目数相同,您可以任意选择一位。至少这是您的查询所做的。而且您不需要子查询:

SELECT
  artist,
  COUNT(DISTINCT song)
FROM user_log_table
GROUP BY artist
ORDER BY COUNT(*) DESC
LIMIT 1;

这为您提供了具有两个值(艺术家和歌曲数量)的一行。如果您当然只想要两个值之一,则可以从 select 子句中删除artistor 。COUNT(distinct song)

于 2021-06-08T07:38:01.810 回答