这里似乎有很多线程在问类似的问题,但我还没有找到可以帮助我解决问题的线程。
我正在尝试选择具有最低值的行,其中三个其他条件必须为真或回退到另一组条件,给定变量 ( 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
结果: 编辑结果 - charlie01 应该是 2
VARIABLE |RESULTING ROW
--------------------------
charlie01 |2
charlie02 |7
charlie03 |12
### 开始伪代码:###
选择小于和大于等于或如果没有结果的最低 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
###结束伪代码###
这是我写的查询(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
干杯
查理