如果我在 tblCust
c_id Option Numbers
10 1 2
5 1 1
10 2 1
我想返回 c_id = 10 时 Numbers 最大的选项。我试过了
SELECT Option, MAX(Numbers) FROM tblCust WHERE c_id = 10
但没有运气
如果我在 tblCust
c_id Option Numbers
10 1 2
5 1 1
10 2 1
我想返回 c_id = 10 时 Numbers 最大的选项。我试过了
SELECT Option, MAX(Numbers) FROM tblCust WHERE c_id = 10
但没有运气
没有子查询,您可以对事物进行排序以获得最大的
SELECT Option FROM tblCust
WHERE c_id = 10
ORDER BY Number DESC LIMIT 1
您没有指定 DBMS,所以这是标准 SQL
select *
from (
select c_id,
option,
max(option) over (partition by c_id) as max_opt
from tblCust
where c_id = 10
) t
where option = max_opt;
我认为使用 max() over() 是为了反对数字,而不是选项
select *
from (
select c_id,
option,
max(numbers) over (partition by c_id) as max_numbers
from tblCust
where c_id = 10
) t
where numbers = max_numbers;
但是,如果数据使得您有多个等于 max(Numbers) 的记录 - 并且您只想要一个结果记录 - 那么使用 row_number() 可能是一个更好的选择。
select *
from (
select c_id,
option,
row_number() over (partition by c_id order by Numbers DESC, Option DESC) as rn
from tblCust
where c_id = 10
) AS t
where rn=1
;
注意这里 over() 中的 order by,它首先放置最高的 Numbers 和 Option,然后将 row_number 值设为 1
用这个:
SELECT Option, Numbers
FROM tblCust
WHERE c_id = 10
ORDER BY Numbers DESC
LIMIT 1
输出:
Option Numbers
1 2