如何解决如何从 postgres 分组集查询中删除空值
我想在单个查询中执行多个独立的分组,以便我可以在单个查询中获得不同列的分组计数。 我使用以下示例查询实现了这一点:
SELECT model,count(model),os_version,count(os_version),timezone,count(timezone)
FROM device
GROUP BY
GROUPING SETS(
(model),(os_version),(timezone)
);
查询的示例结果如下:
"model" : "model A","count" : 14,"os_version" : null,"timezone" : null,"count" : 14
"model" : "model B","count" : 6,"count" : 6
"model" : null,"count" : 12,"os_version" : "Win 10","count" : 12
"model" : null,"count" : 8,"os_version" : "Mac OS","count" : 8
"model" : null,"count" : 5,"timezone" : "GMT","count" : 5
"model" : null,"count" : 15,"timezone" : "EST","count" : 15
从结果中,您可以看到它首先在 model
列上分组,然后是 os_version
,然后是 timezone
。
但在此过程中,它还为当前未进行分组的列引入了空值。
我想知道是否有任何方法可以在不编写任何自定义解析器的情况下获得没有任何空值的结果。比如我期待的目标结果是:
"model" : "model A","model" : "model B","count" : 15
解决方法
您可以使用外部查询包装查询:
SELECT CASE WHEN model IS NOT NULL THEN 'model'
WHEN os_version IS NOT NULL THEN 'os_version'
WHEN timezone IS NOT NULL THEN 'timezone'
END AS category,coalesce(model,os_version,timezone) AS value,count
FROM (SELECT model,timezone,count(*)
FROM device
GROUP BY GROUPING SETS ((model),(os_version),(timezone))
) AS q;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。