嗨,我试图从Cassandra中的表获取最大合著者发布,但是当我查询select coauthor_name, MAX(num_of_colab) AS max_2020 from coauthor_by_author where pid = '40/2499' and year=2020;
时,它返回了不匹配的行。
它会传回:
这是错误的,因为9属于另一个合著者。
下面是我为表创建的语句:
CREATE TABLE IF NOT EXISTS coauthor_by_author (
pid text,
year int,
coauthor_name text,
num_of_colab int,
PRIMARY KEY ((pid), year, coauthor_name, num_of_colab)
) WITH CLUSTERING ORDER BY (year desc);
作为证明,这里是原始表格的一部分:
如您所见,Abdul Hanif Bin Zaini作为合著者发表文章数量应该只有1篇
1条答案
按热度按时间envsm3lx1#
MAX()
函数正如广告中所宣传的那样工作,但我认为你对它如何工作的理解是不正确的。让我用一个例子来说明。下面是作者表的模式:
以下是作者、合作作者以及合作次数的样本数据:
Anita有三位合著者:
Anita的最高合作次数是
12
:同样,卡修斯也有两位合著者:
其中
14
是最多的协作:您的问题不完整,因为您没有提供完整的示例数据,但我怀疑您希望获得合作最多的合著者的姓名。此CQL查询将不会返回您所需的结果:
在
SELECT coauthor_name, MAX(num_of_colab)
中,您错误地假设MAX(num_of_colab)
的结果对应于coauthor_name
。聚合函数只返回一行,因此结果集只包含一个合著者。合著者Abdul ...
恰好是结果中的第一行,因此与MAX()
输出一起列出。使用集合函数时,只有在
SELECT
语句中单独指定该函数才有意义:在查询选择器中指定其他列对于聚合函数没有意义。干杯!