mysql - SELECT COUNT 与 ORDER BY 混淆

标签 mysql

我有一个问题我真的不明白。 查询

SELECT
    f.*,
    ftv.content,
    ftv.updated,
    COUNT(ftv.file_number) AS versions
FROM 
    files as f
INNER JOIN 
    files_text_versions AS ftv
ON 
    ftv.file_number = f.file_number
WHERE 
    f.file_number = '%s'
ORDER BY 
    ftv.updated DESC
LIMIT 1

完全忽略 ORDER BY 语句,但如果我删除

COUNT(ftv.file_number) AS versions

查询运行良好,并按照应有的顺序进行排序。

这是为什么,我该如何解决?

SQL fiddle 有同样的问题但只有一张表:

http://sqlfiddle.com/#!2/c8f124/2

最佳答案

您的count(*) 将查询转换为聚合查询。如果没有 group by,它只会返回一行。虽然在其他数据库中你会得到一个错误,但 MySQL 允许这种语法。

您可以通过添加group by 来解决这个问题。但是,ftv 中的其他两列会出现问题。您可以通过巧妙的聚合获得所需的值:

SELECT f.*,
       substring_index(group_concat(ftv.content order by ftv.updated desc), ',', 1) as content,
       MAX(ftv.updated) as updated,
       COUNT(ftv.file_number) AS versions
FROM files f INNER JOIN 
     files_text_versions AS ftv
     ON ftv.file_number = f.file_number
WHERE f.file_number = '%s'
GROUP BY t.file_number
ORDER BY updated DESC
LIMIT 1;

关于mysql - SELECT COUNT 与 ORDER BY 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24285110/

相关文章:

更新重复行的 MySql 查询非常慢。建议需要加快

php - "disable"一些MySql记录所以搜索时不返回?

html - 我的 onclick 函数在确保所有必填字段错误消息之前运行

mysql查询两张表

mysql - 带条件的 SQL 多语句

c# - C# 中带有字典的 InvalidCastException

MySQL Group By自定义时间戳

php - 私聊系统MYSQL查询ORDER BY和GROUP BY

考虑顺序的mysql查询

mysql - Sequelize 获取查询的所有数据而不执行我的条件 'where'