簡體   English   中英

從 MySQL 表中選擇一個鍵值,其中包含鍵的行大於另一行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM