似乎有很多線程在這裏提出類似的問題,但我還沒有找到能夠幫助我解決問題的線程。MYSQL - 選擇具有最低值和其他條件的行,或具有最高的回退
我想選擇一排,在最低值,而其他三個條件必須是真還是回落到設定其他條件給定的變量(uc
),然後選擇最高價。
Table: level (sample data)
id |price |copies |used |uc
--------------------------------------
1 |7 |10 |10 |charlie01
2 |17 |10 |8 |charlie01
3 |37 |5 |5 |charlie01
4 |47 |10 |9 |charlie01
7 |5 |15 |9 |charlie02
8 |15 |15 |0 |charlie02
9 |35 |15 |0 |charlie02
10 |45 |15 |0 |charlie02
11 |3 |5 |5 |charlie03
12 |13 |5 |5 |charlie03
結果: EDITED結果 - charlie01應該是2
VARIABLE |RESULTING ROW
--------------------------
charlie01 |2
charlie02 |7
charlie03 |12
### START僞代碼:###
與最低price
選擇行其中used
小於copies
和used
大於0
和uc
等於VARIABLE
如果沒有結果(這意味着所有的used
等於copies
)與在used
等於copies
和uc
等於VARIABLE
SELECT *
FROM level
WHERE
(
used < copies
AND used > 0
AND uc = *VARIABLE*
)
### OR IF NO RESULTS ###
(
used = copies
AND uc = *VARIABLE*
)
ORDER BY price ASC
LIMIT 1
最高價選擇行### END僞代碼###
這是我寫的查詢(使用uc
charlie01
作爲示例):
SELECT *
FROM (
SELECT *
FROM `level`
WHERE
((
`used` < `copies`
AND `used` > '0'
)
OR
(
`used` = `copies`
))
AND `uc` = 'charlie01'
ORDER BY `price` ASC
) AS T
ORDER BY `used` ASC
LIMIT 1
它不能在因爲記錄3
的樣本數據的工作,即使used = copies
。這是因爲used on record 3 < used on record 2 (the row we want, because it has the lowest price)
我知道MAX()存在,並且已經嘗試了一個小時使用它,但沒有成功,我真的不認爲我的理解它是如何工作的,這似乎只是選擇整列的最大值不管是什麼...?
現在,我已經繞圈子添加了條件等,但我認爲我需要做一些類型的JOIN
,但我不確定從哪裏開始。你如何看待我應該去查詢這個問題?
編輯:我真的很抱歉,我才意識到我是說,當我真正想選擇最低價格最高價,其中used
< copies
但最高價,如果所有used
= copies
乾杯
查理
但第4行*是*使用的最高價格<副本。你爲什麼改變結果表? – wlangstroth 2012-04-17 01:12:34
Sh * t我很抱歉,我剛剛意識到我說的最高價格,當我真的試圖選擇最低的價格在哪裏使用<副本,玩這個很長的時間後的腦失效...... :( – 2012-04-17 01:19:21
:)如果您更改結果表,我會更改代碼片段 – wlangstroth 2012-04-17 01:20:31