MySQL - Max()返回错误的结果

Ste*_* S. 1 mysql sql aggregate-functions greatest-n-per-group

我在MySQL服务器上试过这个查询(5.1.41)......

SELECT max(volume), dateofclose, symbol, volume, close, market FROM daily group by market
Run Code Online (Sandbox Code Playgroud)

我得到了这个结果:

max(volume) dateofclose symbol  volume  close   market
287031500     2010-07-20  AA.P    500     66.41   AMEX
242233000     2010-07-20  AACC    16200   3.98    NASDAQ
1073538000   2010-07-20  A       4361000 27.52   NYSE
2147483647   2010-07-20  AAAE.OB 400     0.01    OTCBB
437462400     2010-07-20  AAB.TO  31400   0.37    TSX
61106320       2010-07-20  AA.V    0       0.24    TSXV
Run Code Online (Sandbox Code Playgroud)

如您所见,最大音量与音量列的"实际"值非常不同?!?

volume列定义为int(11),我在这个表中有200万行,但它离MyISAM存储的最大值很远,所以我不相信这是问题所在!?同样奇怪的是数据从同一天开始显示(dateofclose).如果我使用WHERE子句强制特定日期,则相同的符号会出现不同的max(volume)结果.这很奇怪......

需要一些帮助!

更新:

这是我编辑的"工作"请求:

SELECT a.* FROM daily a 
INNER JOIN ( 
SELECT market, MAX(volume) AS max_volume 
FROM daily 
WHERE dateofclose = '20101108' 
GROUP BY market 
) b ON 
a.market = b.market AND 
a.volume = b.max_volume
Run Code Online (Sandbox Code Playgroud)

所以这给了我市场上最高交易量的股票(2010年11月8日).

cee*_*yoz 7

如您所见,最大音量与音量列的"实际"值非常不同?!?

这是因为MySQL相当奇怪,并不是GROUP一种感性的方式.

选择MAX(column)将获得该列的最大值,但选择其他列(或其column自身)不一定会选择找到的MAX()值所在的整行.您基本上可以获得任意(通常无用的)行.

这是一个使用子查询的一些解决方案的线程: 如何用SQL中的另一列选择MAX(列值),DISTINCT的行?