我正在查询数据库中的表格;
我不是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。
非常感谢任何建议。
答案 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来计算才能获得正确的解决方案