MySQL 最大 N 个结果与连接表

2023-12-11

选择前 n 个结果,我在这里看到了大量关于如何做到这一点的帖子和精彩文章,但我很难用我的数据集来做到这一点。大多数示例都侧重于数据集,而不需要额外的联接。

我一直在尝试应用以下示例http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/我的查询没有取得太大成功。

存在 Person、Credit 和 Media 三个表。

个人链接到信用和信用到媒体。

下面的查询应该返回每人排名前 5 的媒体,但事实并非如此,我哪里出错了?

SELECT 
p.id AS person_id, 
c.id AS credit_id, 
m.id AS media_id, m.rating_average
FROM person p
INNER JOIN credit c ON c.person_id = p.id
INNER JOIN media m ON m.id = c.media_id
where (
   select count(*) from media as m2
    inner JOIN credit c2 on m2.id=c2.media_id
   where c2.person_id = c.person_id and m2.rating_average >= m.rating_average
) <= 5

澄清:

热门媒体是根据 rating_average 最高的媒体计算得出的。

Update:

SQLFiddlehttp://sqlfiddle.com/#!9/eb0fd

每人 (p) 前 3 个媒体 (m) 的期望输出。显然,我希望能够对前 5 名媒体进行此操作,但这只是测试数据。

p   m   c   rating_average
1   9   27  9
1   7   28  8
1   1   1   8
2   1   5   8
2   4   8   8
2   7   29  8
3   4   10  8
3   3   9   6
3   5   11  5
4   3   13  6
4   5   14  5
4   6   15  3
5   4   16  8
5   5   17  5
5   6   18  3
6   6   19  3
7   7   20  8
8   9   23  9
8   1   21  8
8   8   22  0
9   1   24  8
9   7   26  8
9   5   25  5

我想我解决了:)

首先,这是一个基于您开始方式的解决方案。但有一个问题,我无法解决它为每个 person_id 显示精确的 3 行(或者您选择的任何数字,例如我选择 3 行)。问题是,解决方案是基于计算有多少行 rating_average 大于当前行。因此,如果您有 5 个相同的最高值,您可以选择显示全部 5 个或根本不显示它们,但这不好。所以这就是你这样做的方式......(当然,这是一个例子,如果你有 4 个最高值,你就将它们全部显示出来(我认为不显示数据根本没有意义))......

 SELECT t1.person_id, t1.credit_id, t1.media_id, t1.rating_average
 FROM (SELECT p.id AS person_id, c.id AS credit_id, m.id AS media_id, 
              m.rating_average AS rating_average
       FROM person p
       INNER JOIN credit c ON c.person_id = p.id
       INNER JOIN media m ON m.id = c.media_id) as t1
 WHERE (SELECT COUNT(*) 
       FROM (SELECT p.id AS person_id, c.id AS credit_id, m.id AS media_id, 
                    m.rating_average AS rating_average
             FROM person p
             INNER JOIN credit c ON c.person_id = p.id
             INNER JOIN media m ON m.id = c.media_id) AS t2
       WHERE t2.person_id = t1.person_id AND t2.rating_average > t1.rating_average) < 3
 ORDER BY person_id ASC, rating_average DESC

重要的:如果您没有自我重复的值,则此解决方案可以工作(为每个人显示精确的 3 行)...这是小提琴http://sqlfiddle.com/#!9/eb0fd/64你可以看到 person_id 为 1 的问题!

之后我又玩了一点,让它按照我认为的问题中想要的方式工作。这是一个代码:

SET @num := 0, @person := 0;

SELECT person_id, credit_id, media_id, rating_average, rowNumber 
FROM (SELECT t1.person_id, t1.credit_id, t1.media_id, t1.rating_average,
             @num := if(@person = t1.person_id, @num + 1, 1) AS rowNumber,
             @person := t1.person_id
      FROM (SELECT p.id AS person_id, c.id AS credit_id, m.id AS media_id, 
                   m.rating_average AS rating_average
            FROM person p
            INNER JOIN credit c ON c.person_id = p.id
            INNER JOIN media m ON m.id = c.media_id
            ORDER BY p.id ASC, m.rating_average DESC) as t1) as t2
 WHERE rowNumber <= 3

这是小提琴http://sqlfiddle.com/#!9/eb0fd/65 ...

GL!

P.S.对不起我的英语希望你能明白我在说什么......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL 最大 N 个结果与连接表 的相关文章

  • MySQL SELECT 输出同一行中每个 id 的下一个日期

    我查询的表结构如下 ID Date Before value After value 1 2014 04 25 Win Loss 1 2014 04 30 Loss Win 1 2014 08 18 Win Loss 1 2014 08 2
  • 如何用 UNION 运算符替换 OR 运算符?

    这是我的查询 SELECT h id h subject h body matnF h amount h keywords tags h closed h author id author h AcceptedAnswer h type h
  • SQL 检查一组日期是否在指定的日期范围内

    我有一个表 其中保存架构中房间不可用的日期 ROOM ID DATE UNAVAILABLE 我需要一个 sql 查询来检查两个日期范围内是否有可用房间 类似于 Select All rooms that are constantly av
  • MySQL InnoDB 查询性能

    我正在尝试优化一个简单的 sql 查询 该查询将多次运行大量数据 这是场景 MySQL 与 InnoDB 表 where 和 join 中使用的所有字段都已索引 表有 FK 我不需要查询的整个缓存 但每个表的缓存是可能的 表有更多的更新 插
  • MySQL 全文搜索不适用于某些单词,例如“house”

    我已经在 3 个字段中的一小部分记录上设置了全文索引 也尝试了 3 个字段的组合 并得到了相同的结果 有些单词返回结果很好 但某些单词如 house 和 澳大利亚 不这样做 有趣的是 澳大利亚 和 家乡 这样做 这似乎是奇怪的行为 如果我添
  • MySQL 存储过程将值分配给 select 语句中的多个变量

    这是我的存储过程 我在为声明的变量赋值时遇到问题 当我执行它时 插入和更新命令工作正常 但声明变量的值保持为 0 但我在数据库中有一些价值 我怎样才能正确地做到这一点 BEGIN DECLARE PaidFee INT DEFAULT 0
  • 显示表 FULLTEXT 索引列

    我希望运行一个查询 该查询将返回表中全文索引的列列表 该表采用 MyISAM 格式 我将使用 php 来构建查询 理想情况下 我会运行查询 它会返回信息 以便我可以构造一个以逗号分隔的列字符串 例如 名 姓 电子邮箱 这在 MySQL 中可
  • PHP 绑定“bigint”数据类型(MySQLi 准备好的语句)

    studentId 57004542323382 companyOfferId 7 sql INSERT INTO studentPlacement companyOfferId studentId VALUES if stmt db gt
  • 截断 Mysql 表 Cron 作业?

    我在如何使用 cron 作业截断 Mysql 表时遇到了一些麻烦 无论我尝试什么 我似乎都无法让数据库清除表格 感谢您的帮助 mysql uderp example pexample hlocalhost Dexample e TRUNCA
  • 阻止注销页面后的后退按钮

    我有 php 注销页面 当用户单击注销链接时 请参阅此页面并重定向到索引页面 但是当单击后退按钮时 我会看到带有用户数据的上一页 当然 当我刷新页面时 我看不到以前的页面和数据 我在单击注销并单击后退按钮后检查了其他代码 drupal 但我
  • 如何在Mysql中仅将不同的值从一个表复制到另一个表?

    我有一个大约 2 5GB 的 MySql 数据库 表 A 具有以下列 anoid query date item rank url 我刚刚创建了另一个仅包含列的表 b query and date 我想在查询列中插入所有不同的记录 及其各自
  • 为什么我的 if 语句没有按我预期的方式工作?

    我正在尝试实现以下目标 我向我的 SQL 数据库询问使用SELECT FROM subjects 这样做之后我要求使用数组mysqli fetch assoc 在那之前一切都很好 现在的问题是 当我尝试在每个循环中修改 genero 的值
  • 使用 PHP 的 MySQL 连接字符串

    我正在尝试通过本地计算机连接到托管在我的服务器上的数据库 我的服务器有cPanel 11 它是一个典型的共享服务器 由CentOS提供支持 安装了PHP和MySQL 准确地说 我在同一台服务器上持有经销商帐户 我想在不同帐户或域之间访问数据
  • 如何在Sequelize中设置查询超时?

    我想看看如何在 Sequelize 中设置查询的超时时间 我查看了 Sequelize 文档以获取一些信息 但我找不到我要找的东西 我发现的最接近的是 pools acquire 选项 但我不想设置传入连接的超时 而是设置正在进行的查询的超
  • MySQL PHP邮政编码比较具体距离

    我试图找出比较一个邮政编码 用户提供的 和一大堆其他邮政编码 现在大约有 200 个邮政编码 之间的距离的最有效方法 相对于加载时间 但它会随着时间的推移而增加 我不需要任何精确的东西 只是在球场上 我下载了整个美国的邮政编码 csv 文件
  • 在服务器上找不到本地主机或 phpMyAdmin:如何修复?

    我按照安装说明进行操作PHP MySQL and PHPMyAdmin 但是当我尝试访问时http localhost phpmyadmin 我收到此错误 未找到 在此找不到请求的 URL phpmyadmin 服务器 然后我尝试访问loc
  • gem install mysql:无法构建 gem 本机扩展 (Mac Lion)

    我为 Mac OS X Lion 安装了 MySQL 5 5 27 来自 dmg 现在我尝试安装 mysql gem gem install mysql Building native extensions This could take
  • Mysql 将 int 转换为 MAC

    我有一些数据可以转换 其中有 2 列 其中一列有 IP 它包含整数值 我在 mysql 查询中使用了以下函数 是否有一个函数可以用来转换我的 mac 列 其中包含整数和数据类型是bigint to MAC地址 SELECT INET NTO
  • 如何将ElasticSearch与MySQL集成?

    在我的一个项目中 我计划将 ElasticSearch 与 MySQL 结合使用 我已经成功安装ElasticSearch 我可以单独管理ES中的索引 但我不知道如何用 MySQL 实现同样的功能 我读过一些文件 但我有点困惑 没有明确的想
  • PDO PHP 连接,致命错误

    我的连接类 firstcode php class DB functions public db function construct try db new PDO mysql localhost dbname xxx charset ut

随机推荐

  • TestNG @Listeners 排序问题

    我的 TestNG 测试类中有多个侦听器及其使用 Listeners注释来加载侦听器 我的听众相互依赖 所以我需要确保listener1之前正在执行listener2总是 我在定义侦听器数组时尝试给出顺序 但似乎并不一致 有时Listene
  • Hive查询语言中的主键和索引可以吗?

    我们正在尝试将 oracle 表迁移到 hive 并对其进行处理 目前oracle中的表有primary key foreign key and unique key限制 我们可以在 hive 中复制相同的内容吗 我们正在对如何实施进行一些
  • MVC项目的views文件夹中的Web.Config文件有什么作用

    我在部署应用程序时遇到一些问题 在排除故障时 我遇到了Web Config文件在Views文件夹 为了缩小问题来源的可能性 我试图找出该问题的目的Web Config文件 但找不到太多信息 所以基本上我的问题是 什么是Web config文
  • 关系型数据库设计多用户类型

    我有 4 种类型的用户 每种类型都有特定的数据 但他们也共享公共数据 例如username password 我的第一个想法是创建一个主要的users表与user type柱子 然后在查询用户数据时我可以先选择他们的user type然后根
  • OleDbConnection 处理速度非常慢(2s)

    我在 OleDbConnection 访问同一网络中 Windows 共享上的 mdb 文件时遇到问题 当它在使用部分的末端被处理时 需要2秒以上的时间 打开连接并执行查询或填充DataTable最多只需要50ms 这是我的代码 priva
  • Elasticsearch:排序整数降序

    当使用查询在elasticsearch 版本 1 1 2 中按整数字段排序时 query match all sort cubicCapacity order asc ignore unmapped true from 0 size 150
  • 如何将方法作为回调传递给另一个类?

    我有一个关于使用 tr1 function 回调的问题 我定义了以下内容 class SomeClass public typedef std tr1 function
  • 如何使用 Angular + Masonry 修复重叠的砖块?

    我在用着Passy 的 Angular Masonry 指令在我的应用程序中渲染平铺元素 与许多砖石示例不同 我的砖块不包含图像 仅包含通过自定义指令呈现的静态文本和布局内容 我的设置如下 div div class masonry bri
  • 从 Activity A->B->C 导航 - 如何在 onBackPressed() 中将数据从 C 传递到 A?

    From Activity A call Activity B 从 B 到 C 并在通话时Activity C 我打电话给完成Activity B 从堆栈历史记录中清除Activity B and in Activity B onBackP
  • Python 中的加密字符串

    我需要用Python 加密一个小字符串 是否可以使用密钥来加密字符串 有没有一种好方法可以仅使用 Python 库来做到这一点并达到合理的加密级别 你能告诉我该怎么做吗 我对密码学的了解非常基础 看一眼py bcrypt 也许它会满足您的需
  • 在 Android 中使用相同的 debug.keystore 更新另一台机器中的应用程序

    我已在我的设备中安装了我的应用程序 现在由于某些原因 我已将代码和 debug keystore 导出到另一台计算机 当我重建应用程序时 它说 由于应用程序签名不同 重新安装失败 实际上我想更新应用程序而不卸载 我怎样才能做到这一点 谢谢
  • SPARQL:返回指定或等效类满足的所有交集

    如果我将 ABC 类和 CDE 类定义为 A B C D E 类的交集 如下所示
  • 复制并粘贴到嵌入 javafx 应用程序中的 codemirror.js

    我正在使用 codemirror js 库在 Java FX 中创建简单的编辑器 我使用 javafx scene web WebView 组件在 javafx 中嵌入了 codemirror 编辑器 并使用以下 html js 代码
  • 为什么 attr() 仅应用最后一种样式? [复制]

    这个问题在这里已经有答案了 我想知道为什么 attr 仅应用最后一个样式属性我想详细了解原因是什么 p first paragraph p
  • 显示多个项目的 Windows 上下文菜单

    我有一个列出文件的应用程序 我允许用户右键单击文件 我的应用程序会显示所选文件的 Windows 上下文菜单 I use SHParseDisplayName获取文件名的 pidl 然后我绑定到父对象 IntPtr pidlLast Int
  • 内联表单集仅保存最后一个表单

    我尝试了很多方法并进行了很多搜索 谷歌搜索 但没有人为我工作 每当我保存内联表单集时 它只保存最后一个表单 我的模型 py class Book models Model book models CharField max length 2
  • 为什么 Left 函数返回运行时错误“424”?

    下面的代码应复制单元格中的值并将其前 10 个字符粘贴到区域中的同一单元格中 在这一行 Sh Cells i 5 Left Sh Cells i 5 Value 10 Copy 我收到运行时错误 424 需要对象 在行前添加 set 不起作
  • 使用 VS2012 附带的 Install Shield 创建可更新的设置

    我正在尝试使用 Install Shield LE 打包分发 winforms 应用程序 这运行良好 我什至将 net 4 5 可再发行组件打包在 setup exe 中 我遇到的问题是我现在正在创建应用程序的 1 4 版本 我希望它能够成
  • 删除 AutoCompleteTextView 下拉列表分隔线

    在我的应用程序中 我使用 AutoCompleteTextView 要求之一是隐藏分隔线 我已将 AutoCompleteTextView 添加到布局中
  • MySQL 最大 N 个结果与连接表

    选择前 n 个结果 我在这里看到了大量关于如何做到这一点的帖子和精彩文章 但我很难用我的数据集来做到这一点 大多数示例都侧重于数据集 而不需要额外的联接 我一直在尝试应用以下示例http www xaprb com blog 2006 12