這是我的桌子:
| 學生卡 | 主題ID | 全部的 | 最大限度 |
|---|---|---|---|
| 101 | 1 | 90 | |
| 102 | 2 | 80 | |
| 103 | 1 | 95 | |
| 101 | 1 | 82 | |
| 103 | 2 | 76 | |
| 104 | 1 | 95 | |
| 101 | 2 | 71 |
我想在插入或更新總列時獲取特定主題的最大總數并將其存盤在另一列中。
這就是我希望表格的樣子:
| 學生卡 | 主題ID | 全部的 | 最大限度 |
|---|---|---|---|
| 101 | 1 | 90 | 95 |
| 102 | 2 | 80 | 80 |
| 103 | 1 | 95 | 95 |
| 101 | 1 | 82 | 95 |
| 103 | 2 | 76 | 80 |
| 104 | 1 | 95 | 95 |
| 101 | 2 | 71 | 80 |
我已經嘗試過這個查詢,但它沒有將每個科目的最高分數與所有 student_id 相加。
SELECT MAX(`total`) AS highest
FROM results
GROUP BY student_id
我想我應該為此使用觸發器,但我也可以正常查詢。
uj5u.com熱心網友回復:
如果您的列在您的表中尚不存在,您需要使用ALTER陳述句添加它。
ALTER TABLE <your_table_name> ADD max INT;
然后,您可以首先使用聚合為每個“ subject_id ”選擇“ max ”值,然后在利用操作的陳述句中使用它:UPDATEJOIN
UPDATE <your_table_name>
INNER JOIN (SELECT subject_id,
MAX(total) AS total_max
FROM <your_table_name>
GROUP BY subject_id) cte
ON <your_table_name>.subject_id = cte.subject_id
SET <your_table_name>.max = cte.total_max;
在此處查看演示。
uj5u.com熱心網友回復:
假設您使用的是 MySQL 8 。
理想情況下,不是將 MaxTotal 資料存盤到每列中,而是應該在選擇時獲取這樣的資料:
WITH CTE AS (SELECT subject_id,MAX(total) AS MaxTotal
FROM results
GROUP BY subject_id
)
SELECT results.*,CTE.MaxTotal
FROM results
JOIN CTE ON results.subject_id = CTE.subject_id;
但是,如果您仍然需要更新它,請使用UPDATEwithJOIN
WITH CTE AS (SELECT subject_id,MAX(total) AS MaxTotal
FROM results
GROUP BY subject_id
)
UPDATE results
JOIN CTE ON results.subject_id = CTE.subject_id
SET results.MaxTotal = CTE.MaxTotal;
更新后的輸出:
| 學生卡 | 主題ID | 全部的 | 最大總計 |
|---|---|---|---|
| 101 | 1 | 90 | 95 |
| 102 | 2 | 80 | 80 |
| 103 | 1 | 95 | 95 |
| 101 | 1 | 82 | 95 |
| 103 | 2 | 76 | 80 |
| 104 | 1 | 95 | 95 |
| 101 | 2 | 71 | 80 |
看到這個db<>fiddle。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/493853.html
上一篇:Yii2,損壞的JSON物件保存在MySQLJSON欄位中
下一篇:如何在SQL中按列獲取最大值
