目标:要对具有event_name ='Wallet'的用户进行计数
问题:我将查询结果限制为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?
希望问题很清楚
答案 0 :(得分:2)
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
if(request.getHeader("Authorization")==null){
response.setHeader(HttpHeaders.WWW_AUTHENTICATE,"Basic");
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
}
else{
String credentials = request.getHeader("Authorization");
}
应用于查询产生的结果集。
您的查询是没有limit
的聚合查询。这样的聚合总是 返回一行。因此,group by
不会影响结果。
如果您想在结果集中看到limit
,请使用CTE或子查询:
100
答案 1 :(得分:1)
查询显示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,否则将返回表中的行数)