子查询结果中的重复项

Duplicates in the result of a subquery

我正在尝试从测量中计算不同的 sessionId。 sessionId 作为标签,我计算 "parent" 查询中的不同条目,因为 distinct() 不适用于标签。 在子查询中,我使用 group by sessionId limit 1 仍然可以从索引中受益(如果有更有效的技术,我会睁大耳朵,但我仍然想了解发生了什么)。

我有这两个变体:

>  select count(distinct(sessionId)) from (select * from UserSession group by sessionId limit 1)
name: UserSession
time count
---- -----
0    3757
>  select count(sessionId) from (select * from UserSession group by sessionId limit 1)
name: UserSession
time count
---- -----
0    4206

根据我的理解,这些应该 return 相同的数字,因为 group by sessionId limit 1 已经 returns 不同的 sessionIds(以组的形式)。

确实,如果我执行:

select * from UserSession group by sessionId limit 1

我有 3757 个结果(组),而不是 4206 个。

事实上,一旦我将其放入子查询并在父查询中重新 select 字段,一些 sessionIds 在最终结果中多次出现。不总是,因为总共有 17549 行,但有些是。

这表明 limit 1 有点工作,但一些 sessionId 在重新 selected 时仍然有多个条目。也许是某种未定义的行为?

我可以确认我得到了相同的结果。 根据我使用嵌套查询的经验,并不总能提供您想要的 expect/want.

根据您的使用方式,您可以通过以下方式检索标签的所有值列表:

SHOW TAG VALUES FROM UserSession WITH KEY=sessionId

或获取基数(标签的不同值的数量):

SHOW TAG VALUES EXACT CARDINALITY FROM UserSession WITH KEY=sessionId.

这将 return 单行单列 count,包含一个数字。如果您不需要精确的结果,您可以删除 EXACT 修饰符:SHOW TAG VALUES CARDINALITY on Influx Documentation.