参数化聚合的最佳方法

时间:2016-08-20 18:14:55

标签: sql postgresql

我正在为我的应用收集分析。对于我跟踪的每个指标,我允许在7天,30天或90天的间隔内查看,以及按日期,按工作日或按时间进行分组。

处理此问题的最佳方法是什么?

是否可以避免为每个指标执行6个不同的查询6(每个间隔1个,每个分组一个)?

实施例

中间人对话响应时间(按星期几组)Analytic(mon, tue, wed..)

中间人对话响应时间(按时间分组)Analytic(1 am, 2 am, 3 am..)

新对话(按星期几组)Analytic(mon, tue, wed..)

新对话(按日期分组)Analytic(20 aug, 19 aug, 18 aug etc...)

1 个答案:

答案 0 :(得分:0)

抱歉混合了一点posgressql whit sql-server。 @ ...(例如@Param)是变量的sql-server语法我不知道它的postgressql语法,但希望这仍然会说明这种技术。

SELECT
    date
    ,CASE
       WHEN @Param = 'date' THEN date AS
       WHEN @Param = 'dow' THEN EXTRACT(DOW FROM date)
       ....
       ELSE
    END as ParamGRoup
     ,SUM(amount) as TotalAmount
FROM
    Table
WHERE
    date BETWEEN @LowDateParam TO @HighDateParam
GROUP BY
    date
    ,CASE
       WHEN @Param = 'date' THEN date AS
       WHEN @Param = 'dow' THEN EXTRACT(DOW FROM date)
       ....
       ELSE
    END as ParamGRoup

我在你的例子出来之前输入了这个,所以我希望它仍然清晰。无论如何,你可以做的一种方法是使用case语句,然后按相同的case语句分组。您可能必须将case语句的THEN / Else部分转换为VARCHAR或其他东西,以确保一致的数据类型,如果它可以按多个级别进行分组,但它应该可以帮助您。