sql - 如何在 Informix SQL 中创建汇总?
问题描述
我经常在不同的报告中遇到这样的中间汇总:
|calltypename |rating |number |
+-----------------+----------------------------------------+-------+
|sales |1.0 |1 |
|sales |5.0 |2 |
| |3.666666666666666666666666666667 |3 |
|service |1.0 |1 |
|service |3.0 |1 |
|service |5.0 |3 |
|service |9.0 |1 |
| |4.666666666666666666666666666667 |6 |
这里的记录按 calltypename 和中间汇总分组:平均评分和数字总和。Informix SQL 没有 ROLLUP 运算符,因此我尝试使用 UNION 实现类似的结果:
select calltypename, TO_NUMBER(datavalue) as rating, count(*) as number
from calldata
where datakey="qrate1"
group by calltypename, rating
union all
select calltypename, AVG(TO_NUMBER(datavalue)) as rating, count(*) as number
from calldata
where datakey="qrate1"
group by calltypename
order by calltypename, rating
它产生以下结果:
|calltypename |rating |number |
+-----------------+----------------------------------------+-------+
|sales |1.0 |1 |
|sales |3.666666666666666666666666666667 |3 |
|sales |5.0 |2 |
|service |1.0 |1 |
|service |3.0 |1 |
|service |4.666666666666666666666666666667 |6 |
|service |5.0 |3 |
|service |9.0 |1 |
是否有任何提示如何对记录进行排序,以便汇总始终位于相关组下方?
一段时间后,我找到了一个我不太喜欢的解决方案。想法是添加一个将在 ORDER BY 语句中使用的假列“ROLLUP”:
select calltypename as queue, "" as rollup,
datavalue as rating, count(*) as number
from calldata
where datakey="qrate1"
group by queue, rating
union all
select calltypename as queue, "rollup" as rollup,
TO_CHAR(AVG(TO_NUMBER(datavalue)),"*.*") as rating, count(*) as number
from calldata
where datakey="qrate1"
group by queue
order by queue, rollup, rating
这会产生一个结果:
|queue |rollup |rating|number |
+-------+----------+------+-------+
|sales | |1 |1 |
|sales | |5 |2 |
|sales |rollup |3.7 |3 |
|service| |1 |1 |
|service| |3 |1 |
|service| |5 |3 |
|service| |9 |1 |
|service|rollup |4.7 |6 |
但我希望它没有 ROLLUP 列...
解决方案
推荐阅读
- java - sql 错误或缺少数据库(未找到此类表)(来自 Java 的 SQlite 数据库连接)
- c++ - ActiveX 替换选项
- javascript - 如何在没有输入的情况下测试 JS 函数(使用 Jest)
- jenkins - 詹金斯:如何自动删除詹金斯从节点中的工作区
- helix - 在 Helix 实例上注册 MessageListener 和 MessaheHandlerFactory 时如何解决 Helix 不一致的行为?
- rabbitmq - 你如何处理 Rabbitmq 死信队列?
- python - 使用 Numpy Array Python 将新列添加到现有数据框
- regex - 正则表达式查找不包含字符串的行组合
- python - 如何解决 django 中的 getattr() 错误?
- java - 设置超时并在同步改造调用中处理它