0

如果我在 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

但没有运气

4

4 回答 4

1

没有子查询,您可以对事物进行排序以获得最大的

SELECT  Option FROM tblCust
WHERE c_id = 10
ORDER BY Number DESC LIMIT 1
于 2013-10-05T11:29:35.157 回答
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;
于 2013-10-05T11:21:31.760 回答
0

我认为使用 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

于 2013-10-05T14:48:37.183 回答
0

用这个:

SELECT Option, Numbers
FROM tblCust
WHERE c_id = 10
ORDER BY Numbers DESC
LIMIT 1

输出:

Option  Numbers
1       2
于 2013-10-05T11:34:55.760 回答