>目标:获取用户计数,其中有event_name='钱包'
问题:我将查询结果限制为 100 进行检查,因此预期结果必须是 100,但是当我使用 count(params.value.string_value)
时它显示 124 .
代码 : SELECT count(params.value.string_value) FROM "myproj.analytics_197163127.events_20190528",UNNEST(event_params) as params where event_name ='Wallet' and params.key = 'UserId' limit 100
预期结果:如果查询返回 100 条记录,则计数应为 100,但它如何显示 124?
希望问题清楚
limit
应用于查询生成的结果集。
您的查询是没有group by
的聚合查询。 此类聚合始终返回一行。 因此,limit
不会影响结果。
如果要查看结果集100
,请使用 CTE 或子查询:
SELECT count(params.value.string_value)
FROM (SELECT params
FROM "myproj.analytics_197163127.events_20190528" e CROSS JOIN
UNNEST(e.event_params) params
WHERE e.event_name ='Wallet' AND params.key = 'UserId'
LIMIT 100
) ep
查询显示 100 条记录,因为末尾的限制为 100:
SELECT event_date,event_timestamp,event_name, params.value.string_value
FROM myproj.analytics_197163127.events_20190528, UNNEST(event_params) as params
where event_name ='Wallet' and params.key = 'UserId'
limit 100
删除它并再次检查。
LIMIT 100 指定要从 SQL 语句返回的行数。它不会影响查询中的 COUNT((。所以两者之间有区别:
select count(*) from table limit 100
这将返回一个包含表中行数的值。另一方面:
select count(*) from (select * from table limit 100)
这将返回 100(如果表超过 100 行 - 否则它将返回表中的行数(