组和子查询问题

Posted

技术标签:

【中文标题】组和子查询问题【英文标题】:Group and subquery issue 【发布时间】:2021-03-14 22:22:42 【问题描述】:

这是我的示例数据

CREATE TABLE customer1
(
  rating int(9),
  genre varchar(100),
  title varchar(100)
  );
    
  INSERT INTO customer1 (rating, genre, title)
  VALUES
(2, 'A', 'abc'),
(4, 'A', 'abc1'),
(2, 'B', 'abc2'),
(3, 'B', 'abc3'),
(2, 'C', 'abc4'),
(5, 'C', 'abc5');

我需要在每种类型中找到评分最高的标题。

感谢您的帮助。

【问题讨论】:

打成平手怎么办? 【参考方案1】:

一个选项使用子查询进行过滤:

select c.*
from customer1
where c.rating = (select max(c1.rating) from customer1 c1 where c1.genre = c.genre)

这将利用(genre, rating) 上的索引。

mysql 8.0 中,还可以使用窗口函数:

select *
from (
    select c.*,
        rank() over(partition by genre order by rating desc) rn
    from customer1 c
) c
where rn = 1

【讨论】:

以上是关于组和子查询问题的主要内容,如果未能解决你的问题,请参考以下文章

ExpandableListView 中的组和子分隔符

Vb.net 和 Crystal Reports 添加组和子报表

加入查询和子查询

MySQL 查询和子查询

带有组和子复选框的可扩展列表视图给出空指针异常

使用连接语句和子查询准备 CakePHP 查询