New Relic中NRQL查询浏览器宽度时ORDER BY无法按宽度值排序
问题原因
NRQL 中带FACET的聚合查询,默认会按聚合函数的计算结果降序返回数据。你原查询里写的ORDER BY browserWidth没有显式指定排序方向、也没有对browserWidth做数值类型校验,不会覆盖FACET的默认排序逻辑,因此最终返回结果是按出现次数从高到低排列的,不符合按宽度数值排序的要求。
另外如果browserWidth字段在上报时被存为字符串类型,即使触发了属性排序,也会按字典序排列,出现「960排在1280之后」这类不符合数值大小逻辑的错误。
修正后的查询语句
如果需要按宽度数值从小到大升序排列,使用以下语句:
SELECT count(browserWidth) AS visitCount FROM PageAction FACET numeric(browserWidth) AS browserWidth ORDER BY browserWidth ASC LIMIT 1000
如果需要和你给出的示例格式一致,按宽度数值从大到小降序排列,把ORDER BY子句替换为ORDER BY browserWidth DESC即可。
语句说明
numeric(browserWidth):强制将浏览器宽度值转为数值类型,避免字符串类型导致的排序逻辑错误- 显式指定
ASC/DESC排序方向:明确覆盖FACET默认的按聚合值排序的规则,强制按宽度数值排序 AS visitCount:给统计的出现次数字段起别名,方便导出结果后快速对应字段,整理成你需要的宽度值 - 出现次数格式,比如返回browserWidth为1920、visitCount为12356时,直接对应为1920 - 12,356即可。
内容的提问来源于stack exchange,提问作者wagster
相关产品推荐
相关产品推荐

