我有一個像這樣的簡單表:
group | name | price
1 | john |
2 | mike |
3 | paul |
1 | sean |
4 | jack |
2 | brad |
5 | mick |
1 | bill |
4 | chad |
我有兩個不同的價格值,其中 100 歐元用于組的第一個成員,50 歐元用于同一組的所有其他成員。
詳細解釋。如果一個小組只有一個成員,則該成員的價格為 100 歐元。如果一個群組有多個成員,第一個成員的價格為 100 歐元,同一群組的所有其他成員的價格為 50 歐元。可以額外添加無限數量的組。
結果應該是這樣的:
group | name | price
1 | john | 100
2 | mike | 100
3 | paul | 100
1 | sean | 50
4 | jack | 100
2 | brad | 50
5 | mick | 100
1 | bill | 50
4 | chad | 50
我需要一個查詢,當我手動運行它時,它能夠插入/更新所有缺失的價格欄位。
預先感謝您調查此事。
uj5u.com熱心網友回復:
部分答案:您可以GROUP BY在“組”欄位中添加一個HAVING COUNT(group) > 1來確定該組是否有超過 1 個成員。
也就是說,要查看具有多個成員的所有組,它看起來像:
SELECT
group
FROM table
GROUP BY group
HAVING COUNT(group) > 1
這只會告訴您哪些組有多個成員。如果沒有其他方法來確保訂購,您將無法分辨哪個成員是他們組中的“第一”,因此應該定價為 100,所有其他成員定價為 50。
uj5u.com熱心網友回復:
以下查詢未經測驗,可能包含語法錯誤。但它們足以理解原理。有許多可能的方法來實作您的結果。
這是我的看法:我會使用一個查詢來更新每一行的價格并將其設定為 50,無論它是否是第一個組成員。>table_name<,當然,需要更改為您提到的表的名稱。
UPDATE >table_name<
SET price = 50;
然后我會通過運行以下查詢來處理每個單獨的組和各自的第一個成員。通過更改>groupId<使查詢適應每個組。
UPDATE >table_name<
SET price = 100
WHERE id = (
SELECT id
FROM >table_name<
WHERE group = >groupId<
ORDER BY id
LIMIT 1
);
看看嵌套查詢:它只查詢一個組的所有成員的表,按升序對它們進行排序,并且只回傳每個成員的 id。通過將LIMIT應用于查詢,結果將只是第一個組成員的 ID。然后可以在另一個查詢中使用生成的 id 來更新價格并將其設定為 100。
但要小心:如果您插入/洗掉(新)成員的 id 不只是計數,則此查詢可能會選擇“新的第一個成員”。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/396726.html
標籤:mysql
