繁体   English   中英

通过查询获取MySQL组以显示该组中具有最高值的行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM