使用COUNT会返回不同的结果

时间:2016-03-04 09:41:46

标签: mysql

我正在查询数据库中的表格;

  1. 确定最新的video_seek值
  2. 返回总行数
  3. 我不是SQL的专家,我无法弄清楚为什么在SQL语句中使用COUNT会返回与不使用COUNT的语句相比不同的结果。

    查询:

    SELECT video_seek, COUNT(*) AS total 
    FROM videos 
    WHERE video_id = 1 
      AND video_seek > 0 
      AND video_seek_end > 0 
    ORDER BY video_seek DESC 
    LIMIT 1
    

    返回:

    video_seek = 6012
    total      = 199
    

    查询:

    SELECT video_seek 
    FROM videos 
    WHERE video_id = 1 
      AND video_seek > 0 
      AND video_seek_end > 0 
    ORDER BY video_seek DESC 
    LIMIT 1
    

    返回:

    video_seek = 7098
    

    总数是正确的但是video_seek不是,我不知道为什么结果会有所不同,具体取决于是否使用COUNT。

    非常感谢任何建议。

2 个答案:

答案 0 :(得分:3)

这是MySQL peculiarity。如果您使用任何其他DBMS,您将收到“缺少GROUP BY表达式”语法错误。

COUNT()是一个聚合函数,这意味着它将多行合并为一个。如果您没有GROUP BY子句,这意味着您希望将所有匹配的行合并为一个,因此从单个行显示值没有任何意义。正如我所说,其他数据库引擎会警告你错误;相反,MySQL只是从任意行(甚至不是随机行)中选择数据。

我对您的数据或业务逻辑一无所知,但......

SELECT MAX(video_seek) AS max_video_seek, COUNT(*) AS total
FROM videos
WHERE video_id = 1
AND video_seek > 0
AND video_seek_end > 0

(请注意SQL代码接受换行符。)

答案 1 :(得分:1)

您需要使用GROUP BY来计算才能获得正确的解决方案