[英]Getting a MySQL group by query to display the row in that group with the highest value
我正在尝试找出如何查询数据库的方法,这样它实际上将首先对我的结果进行排序,然后对它们进行分组……这个问题似乎有点普遍,我已经找到了一些示例,但我仍然不太了解“如何做到这一点,并在我自己的情况下使用示例。...因此,我们非常感谢所有帮助。
这是我的MySQL表:
图书
book_id
书名
用户
用户身份
用户名
book_reviews
REVIEW_ID
book_id
用户身份
review_date(unix时间戳日期)
我想查询30本书的最新评论。 它们将简单显示为:
书名
审稿人的用户名
但是,我希望每本书最多展示一次。 因此,列表中显示的评论应该是最近添加的评论。 为此,我只是按book_name分组,并按review_date DESC排序。 但是以这种方式查询不会显示最近添加的review_date作为按行分组的记录,因此我的数据不正确。
这是我目前的查询:
SELECT books.books_title, users.user_name, book_reviews.review_id FROM books, users, book_reviews WHERE book_reviews.book_id = books.book_id AND book_reviews.user_id = users.user_id GROUP BY book_title ORDER BY review_date DESC LIMIT 30
从我阅读的内容来看,似乎必须要有一个子查询,才能获得MAX(review_date)值,但我仍然不知道如何将其全部链接起来。
万分感谢。
采用:
SELECT x.book_title,
x.user_name
FROM (SELECT b.book_title,
u.user_name,
br.review_date,
CASE
WHEN @book = b.book_title THEN @rownum := @rownum + 1
ELSE @rownum := 1
END AS rank,
@book := b.book_title
FROM BOOKS b
JOIN BOOK_REVIEWS br ON br.book_id = b.book_id
JOIN USERS u ON u.user_id = br.user_id
JOIN (SELECT @rownum := 0, @book := '') r
ORDER BY b.book_title, br.review_date DESC) x
WHERE x.rank = 1
ORDER BY x.review_date DESC
LIMIT 30
MySQL没有分析/排名/窗口功能,但是这会将评论的排名标记为1。这是每本书的基础...
我按书中最新的顺序列出了审核日期,以每本书的最新日期为准。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.