2015-02-24 70 views
1
sqlite> select sid,max(amount) from(select * from Am where year=2014); 
1,600 
sqlite> select sid from (select sid,max(amount) from(select * from Am where year=2014)); 
3 

哪里来的?!唯一的选择是1 .. 怎么回事? 谢谢。有线sql查询

+1

我不知道为什么差异。两者都应该相当于'SELECT sid,MAX(amount)FROM am WHERE year = 2014'没有理由让它变得复杂。 – JNevill 2015-02-24 15:57:51

+0

我只想要列sid。你是对的,我可以把它缩短。但仍然为什么结果与可能性不同? – Signer3 2015-02-24 15:58:27

+0

那为什么要聚合? – JNevill 2015-02-24 16:01:02

回答

3

select sid, max(amount)似乎并不十分明确。我认为你认为它会让你拥有最高金额的那一排,我不认为这是一个有效的假设。

我会写为

select sid from Am where year = 2014 
and amount = (select max(amount) from Am where year = 2014) 

可以返回多行是否有对应的最高金额领带。

+0

当然,这可能会返回多个具有相同数量的行......我会用'select select top 1 sid from Am where year = 2014 order by amount desc'。 – Luaan 2015-02-24 16:03:36

+0

@Luann,是的,它可以返回多行。但我不确定OP是否只需要一个。 – 2015-02-24 16:04:46

1

现在你知道什么是不确定的手段,如果你不聚合,你需要分组,其他数据库甚至不允许这个操作。 假设你有这些值:

sid amount 
1 600 
1 500 
3 400 
3 200 

select sid,max(amount) from t 

将SID返回一个不确定值和600 MAX.Sid可能是正确的,也可能不是,that`s什么不确定的手段,因为客人不愿意上有任何控制这column.A适当的查询是

select sid,max(amount) from t where year = 2014 GROUP BY sid 

或者

select max(amount) from t