如何通过MAX()函数使用CASE WHEN条件

时间:2019-05-09 08:50:44

标签: mysql

我使用了LAG()窗口函数来创建一列滞后差。现在,我想创建一个附加列,以查看所有滞后差异,仅将最大差异标记为“ MAX”,将最小值标记为“ MIN”。所有其他值应为空。

我创建了一个表,该表的最后一列为lag_difference。我尝试使用CASE WHEN lag_difference = MAX(lag_difference_column) THEN 'MAX' 但我无法对聚合执行条件条件。也许我可以使用子查询生成一个静态值,以吐出一个可以比较的MAX值,但是我希望MAX是动态的,以便如果添加更多的值,MAX(lag_difference_column)也可以更改。

SELECT *,
CASE WHEN lag_difference = MAX(lag_difference) THEN 'MAX'
     WHEN lag_difference = MIN(lag_difference) THEN 'MIN'
     END AS label
FROM(
    SELECT *, pay_amount - LAG(pay_amount) OVER (PARTITION BY full_name ORDER BY pay_month) AS lag_difference
    FROM
        (WITH top_ten AS
        (SELECT customer_id
        FROM payment
        GROUP BY 1
        ORDER BY SUM(amount) DESC
        LIMIT 10)

        SELECT
        DATE_TRUNC('month', payment_date) AS pay_month,
        first_name||' '||last_name AS full_name,
        COUNT(*) AS pay_count,
        SUM(amount) AS pay_amount
        FROM customer c
        JOIN top_ten
        ON c.customer_id = top_ten.customer_id
        JOIN payment p
        ON top_ten.customer_id = p.customer_id
        GROUP BY 1, 2
        ORDER BY 2, 1) sub
) sub2

我希望在lag_difference列旁边再增加一个列,该列的最大值标记为MAX,最小值标记为MIN。但是,如果条件取决于聚合,则不能使用CASE WHEN。

是否有解决此问题的简单方法?

0 个答案:

没有答案
相关问题