将列的聚合与相同 table 的另一列进行比较

Compare aggregate of column with another column of same table

我有一个 table D_MARK 布局如下,

+---------+-----------+-------------------------+
| CLAS_ID | MARK      | MARK_THRESHOLD          |
+---------+-----------+-------------------------+
| 9001    |         5 |                    10   |
| 9001    |        10 |                    10   |
| 9004    |         5 |                    10   |
+---------+-----------+-------------------------+

我正在尝试根据以下逻辑从这个 table 创建一个 View:-

1.Need 按 CLAS_ID.

做 sum(MARK) 分组

2.Need 将 sum(MARK) 展示为 FINAL_MARK 这样,if sum(MARK) > MARK_THRESHOLD then MARK_THRESHOLD else sum(MARK)

预期输出:-

+---------+-----------+
| CLAS_ID | FINAL_MARK|
+---------+-----------+
| 9001    |        10 |
| 9004    |         5 |
+---------+-----------+

这就是我到目前为止所做的,

CREATE VIEW V1 AS SELECT CLAS_ID, SUM(CASE WHEN SUM(MARK) > MARK_THRESHOLD THEN MARK_THRESHOLD ELSE SUM(MARK) END) AS FINAL_MARK 
FROM `D_MARK` GROUP BY CLAS_ID;

执行此操作时,我收到 Invalid use of group function 错误。我猜想在 case 中使用聚合函数是一个很大的问题吗?

所以我想知道是否有人可以帮助我一点,因为我对此很陌生。提前致谢。

P.S。 MARK_THRESHOLD 对于特定的 CLAS_ID 是相同的。

MARK_THRESHOLD 上也与 MAX()(或 MIN() 无关紧要)聚合:

CREATE VIEW V1 AS 
SELECT CLAS_ID, 
       LEAST(SUM(MARK), MAX(MARK_THRESHOLD)) AS FINAL_MARK 
FROM D_MARK 
GROUP BY CLAS_ID

使用函数 LEAST() 代替 CASE 表达式。
demo.
结果:

| CLAS_ID | FINAL_MARK |
| ------- | ---------- |
| 9001    | 10         |
| 9004    | 5          |