0
例子说话最大声:SQL选择不在同一行汇总行中选择其他列的值
select date from prices
where (Close-Open)/Open =
(select max((Close-Open)/Open) as daychange from prices);
会给我正确的结果:
2008-09-17
但
select max((close-open)/open) as daychange, date from prices;
会给我:
0.1082868629230968 | 2014-08-27
这显然不是我想要的。
任何更好或更干净的方式来做这个查询?我想以最大的价格变化来获得一天(百分比)。
您没有在日期列上使用GROUP BY,因此它需要第一个日期值。所以,你的第一种方法是正确的,你只能在'JOIN'上改变你的'WHERE'子句。 – 2014-08-28 14:29:32
我不是MySQL用户,但我很惊讶...如果您在选择中包含聚合函数和普通列引用而不指定适当的组,则MySQL不会抛出错误?它只是从它找到的第一行中提取非聚合表达式的数据值? – 2014-08-28 14:34:04
'select max((close-open)/ open)as daychange,date from prices;'由于不正确的聚合使用,将被所有其他DBMS拒绝。 MySQL返回随机(他们称之为“不确定”)数据。有关详情,请参阅此处:http://rpbouman.blogspot.de/2007/05/debunking-group-by-myths.html – 2014-08-28 14:35:16