[英]Select a key value from MySQL table where one row with the key is greater than another
所以假設我有這張表:
+-------+-------+--------+--------+
| key | id | type | value |
+-------+-------+--------+--------+
| 1 | 1 | cool | 5 |
| 2 | 1 | uncool| 10 |
| 3 | 2 | none | 7 |
| 4 | 2 | cool | 23 |
| 5 | 2 | uncool| 4 |
| 6 | 3 | cool | 6 |
| 7 | 3 | uncool| 3 |
| 8 | 3 | unapp | 52 |
+-------+-------+--------+--------+
請注意,鍵列只是唯一標識符,與我要執行的操作無關。
我想找到冷類型值大於非冷類型值的 ids(鍵),忽略任何其他行。 所以結果是
+------+
| id |
+------+
| 2 |
| 3 |
+------+
我花了幾個小時打開 SQL 編輯器,弄亂了 HAVING 和 GROUP BY,一直找不到解決方案。 有沒有辦法做到這一點,而不必求助於查詢然后用另一種語言執行檢查,或者這是唯一的解決方案?
您可以按id
分組,並僅選取具有您描述的條件的那些。
select id
from your_table
group by id
having max(case when `type` = 'cool' then `value` end) >
max(case when `type` = 'uncool' then `value` end)
SELECT t1.id
FROM table t1
LEFT JOIN table t2 ON t1.id = t2.id
AND t2.type = 'uncool'
WHERE t1.type = 'cool'
AND (t1.value > t2.value OR t2.value IS NULL)
如果不存在uncool
(例如,刪除key=5
行),那么我的解決方案將給出 2 行,而另一個解決方案將僅給出 1 行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.