内容简介:翻译自:https://stackoverflow.com/questions/8302472/mysql-group-by-and-max-returns-wrong-rows
我有两张桌子,我试着找到每天得分最高的“帖子”.
CREATE TABLE IF NOT EXISTS `posts_points` ( `post_id` int(10) unsigned NOT NULL, `comments` smallint(5) unsigned NOT NULL, `likes` smallint(5) unsigned NOT NULL, `favorites` smallint(5) unsigned NOT NULL, PRIMARY KEY (`post_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `posts` ( `profile_id` int(10) unsigned NOT NULL, `post_id` int(10) unsigned NOT NULL, `pubdate_utc` datetime NOT NULL, PRIMARY KEY (`post_id`), KEY `profile_id` (`profile_id`), ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
我已经尝试过以下查询.它返回正确的分数,但其他列只是随机行.我究竟做错了什么 ?
SELECT p.post_id, p.profile_id , MAX(t1.score) , DATE_FORMAT(t1.pubdate_utc, '%d %b') post_date , DATE(t1.pubdate_utc) mydate FROM ( SELECT p.profile_id, p.post_id, p.pubdate_utc , (pp.comments + pp.likes + pp.favorites) AS score FROM posts p INNER JOIN posts_points pp ON p.post_id = pp.post_id ) t1 INNER JOIN posts p ON t1.post_id = p.post_id AND t1.pubdate_utc = p.pubdate_utc GROUP BY mydate ORDER BY mydate DESC LIMIT 18;
我一直遇到这个问题.当 MySQL 运行聚合函数时,对于任何非聚合列,它只是拉出它为该组运行的第一个数据,无论它是否来自MAX行.因此,您需要做的是在内部查询中对数据进行排序,使得maxes在其组中是第一位的.看看这是否适合你:
SELECT t.post_id, t.profile_id, t.score, t.pubdate_utc FROM (SELECT p.profile_id, p.post_id, p.pubdate_utc, (pp.comments + pp.likes + pp.favorites) score FROM posts p JOIN posts_points pp ON p.post_id = pp.post_id WHERE p.pubdate_utc >= DATE_ADD(DATE(NOW()), INTERVAL -17 DAY) ORDER BY score DESC ) t GROUP BY DATE(t.pubdate_utc) DESC ;
请注意,我在这里没有使用MAX功能.按分数降序排序,然后在外部查询中按日期分组将按日期提取最高分.另请注意,我将WHERE子句放在内部查询中.像这样的内部查询(有时是必要的)不是很有效,因为它们没有外部查询的优化索引,所以要确保你的内部结果集尽可能小.最后,请注意GROUP BY DATE(t.pubdate_utc).如果我没有将其简化为日期信息,则会有超过18个结果,因为时间也会计算在内.
编辑:更改为INTERVAL -17 DAY,最多可提供18个结果,而不是19个.
翻译自:https://stackoverflow.com/questions/8302472/mysql-group-by-and-max-returns-wrong-rows
以上所述就是小编给大家介绍的《MySQL group by和max返回错误的行》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- c – 构建PBRT v2错误 – 错误1错误U1077:’if’:返回代码’0x1′
- Laravel Validator 自定义错误返回提示消息以及前端展示
- 解决ASP中http状态跳转返回错误页的问题
- javascript – jquery .ajax总是返回错误 – 数据被添加到数据库
- php – 如何使Laravel为JSON REST API返回自定义错误
- c – 具有协变返回类型和模板类参数的虚拟继承,vs2013中的LINK错误
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Android开发艺术探索
任玉刚 / 电子工业出版社 / 2015-9-1 / CNY 79.00
《Android开发艺术探索》是一本Android进阶类书籍,采用理论、源码和实践相结合的方式来阐述高水准的Android应用开发要点。《Android开发艺术探索》从三个方面来组织内容。第一,介绍Android开发者不容易掌握的一些知识点;第二,结合Android源代码和应用层开发过程,融会贯通,介绍一些比较深入的知识点;第三,介绍一些核心技术和Android的性能优化思想。 《Andro......一起来看看 《Android开发艺术探索》 这本书的介绍吧!