有线sql查询

有线sql查询,sql,sqlite,Sql,Sqlite,3从哪里来?!唯一的选择是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=

3从哪里来?!唯一的选择是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
将从sid返回一个不确定的值,并为MAX返回600。sid可能正确,也可能不正确,这就是不确定的含义,因为您对该列没有任何控制权。正确的查询应该是

sid amount
1   600
1   500
3   400
3   200

select sid,max(amount) from t


现在您知道了“不确定”的含义,如果您不聚合需要分组的对象,其他数据库甚至不允许此操作。 假设您有以下值:

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
将从sid返回一个不确定的值,并为MAX返回600。sid可能正确,也可能不正确,这就是不确定的含义,因为您对该列没有任何控制权。正确的查询应该是

sid amount
1   600
1   500
3   400
3   200

select sid,max(amount) from t

选择sid,max(amount)
似乎没有很好的定义。我认为您假设它将为具有最大金额的行提供sid,我认为这不是一个有效的假设

我会把它写成

select max(amount) from t
如果最大金额有限制,它可以返回多行。

选择sid,max(amount)
似乎没有很好的定义。我认为您假设它将为具有最大金额的行提供sid,我认为这不是一个有效的假设

我会把它写成

select max(amount) from t

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

我不确定为什么会有差异。两者都应该相当于
SELECT sid,MAX(amount)FROM am WHERE year=2014
。你说得对,我可以缩短它。但为什么结果与可能性不同?我不确定为什么会有差异。两者都应该相当于
SELECT sid,MAX(amount)FROM am WHERE year=2014
。你说得对,我可以缩短它。但是为什么结果与可能性不同呢?当然,这可能会返回多个具有相同数量的行。。。我将使用
从Am中选择top 1 sid,其中年份=2014按金额描述的订单
@luan,是的,它可以返回多行。但我不确定OP只需要一行。当然,这可能会返回多行具有相同数量的数据。。。我将使用
从Am中选择top 1 sid,其中年份=2014按金额描述的订单
@luan,是的,它可以返回多行。但我不确定OP只想要一个。