有线sql查询

时间:2015-02-24 15:53:47

标签: sql sqlite

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

3来自哪里?!唯一的选择是1 .. 这是怎么回事? 感谢。

2 个答案:

答案 0 :(得分:3)

select sid, max(amount)似乎没有明确定义。我认为你假设它会给你最大数量的行的sid,我不认为这是一个有效的假设。

我会把它写成

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

如果最大金额达到平局,则可以返回多行。

答案 1 :(得分:1)

现在你知道不确定意味着什么,如果你没有聚合你需要分组,其他数据库甚至不允许这个操作。 假设您有以下值:

sid amount
1   600
1   500
3   400
3   200

select sid,max(amount) from t

将从sid和600返回一个不确定的值,MAX.Sid可能是正确的,也可能不是,这就是不确定的意思,因为你对该列没有任何控制权。正确的查询将是

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

或者

select max(amount) from t