- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
选择前 n 个结果,我在这里看到了很多关于如何做到这一点的帖子和精彩文章,但我很难用我的数据集来做到这一点。大多数示例都集中在数据集上,而不需要额外的连接。
我一直在尝试应用 http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/ 中的示例对我的查询没有多大成功。
存在Person、Credit 和Media 三个表。
Person 链接到 Credit 和 Credit to 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 最高的媒体计算得出的。
更新:
SQLFiddle http://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 个最高值(value),你会把它们全部显示出来(我认为不显示数据根本没有意义))......
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
重要:如果您没有 self 重复的值(value),这个解决方案可以工作(为每个人显示确切的 3 行)......这是 fiddle 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 的 fiddle ...
GL!
P. S. 对不起我的英语,希望你能理解我在说什么......
关于MySQL Greatest N 结果与连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29372841/
为什么 GREATEST(createdTS, modifiedTS) 每列之一为“null”时返回“null”? 如果两者之一为空,我只需要另一个的值。如果两者都为空,则为空。 我该怎么做? 正如我
在Elasticsearch索引中,我有具有以下字段的文档:fooId和fooField。 我想获取给定fooId值但fooField最大值的文档。现在,我有一个聚合的查询过滤器,如下所示: "agg
以下关系仅适用于两个 (3, 12) 数字,当用于三个数字 (3,12,10) 时无法产生正确答案。只是想知道这是我的理解还是仅适用于两个数字,对我来说欧几里得算法也是如此。 LCM(a, b) =
我正在试验 mysql,并使用 GRATEST() 函数进行查询来比较两个不同的字段。 我的查询如下所示: SELECT id, float1, float2, GREATEST(
我创建了一个显示最早时间戳的列,现在我想创建另一个显示该时间戳来源的列。这就是我正在使用的,但当原始数据中的时间戳值之一为 NULL 时,它不起作用。 SELECT LEAST (timestamp_
我试图在我的 mysql 数据库中查询 5 个单独的表,并显示分配给他们的项目最多的 Actor 。表结构如下; item itemid | item | description | brand |
我正在使用 mysql GREATEST()函数从任一列(苹果或桃子)中选择最高的整数值。 +----+------------------+ | id | apples | peaches | +-
选择前 n 个结果,我在这里看到了很多关于如何做到这一点的帖子和精彩文章,但我很难用我的数据集来做到这一点。大多数示例都集中在数据集上,而不需要额外的连接。 我一直在尝试应用 http://www.x
有没有办法从多个列中选择最大和第二大的数字? 例子: Col1 = 0; Col2 = 4; Col3 = 6; Col4 = 3; 我最大的是 6,其次是 4。 我正在尝试实现这样的东西: SELE
我正在尝试在 Snowflake 中使用 GREATEST(),但每当我有空值时,我都会得到 null 而不是所需的结果: select greatest(1,2,null); -- null 这种行
我在 MYSQL 和显然其他数据库引擎中发现有一个“最好的”函数可以使用,例如:great(1, 2, 3, 4),它会返回 4。我需要这个,但我使用的是 IBM 的 DB2 .有没有人知道这样的等效
如何使用 Django 查询获取模型的两个不同 Decimal 字段中的较大者? 例如,如果我有一个模型月份,其中包含名为“实际收入”和“预计收入”的字段,我如何返回较大的值? 我以前使用过 MySQ
在 Haskell 中关于不动点的文本中,经常提到最小和最大不动点。例如。在 Data.Functor.Fixedpoint文档或 here . 最小和最大暗示所涉及类型的顺序(或者仅在固定点上定义它
我正在尝试在 HQL 中找到两个日期中最好的一个。 在 SQL 中,这是有效的: SELECT ( GREATEST(a1.startDate, '2019-10-01T00:00:00Z') ) F
我已经解决了一堆关于使用 mySQL 的 GREATEST() 函数的正确方法的问题,但没有一个问题显示如何将它与列一起使用。 Official Documentation给出手动输入列表的列表。 T
我试图从这部分查询中获得最大值(value): greatest((follette_title.usedbuying_price *1.37) or (amtext.price*1
题目地址:https://leetcode-cn.com/problems/kids-with-the-greatest-number-of-candies/ 题目描述 给你一个数组 candie
我的理解是 GREATEST() 和 LEAST() 不是 SQL 标准的一部分,但很常见。 我在想,有没有办法在 SQL 标准中克隆 GREATEST 的功能? SELECT id, GREATES
我正在努力构建一个 Tableau仪表板,最近刚刚了解了 Tableau v9 中发布的新的详细级别计算。原始数据结构如下: User Workflow Step Time Spe
我的 SQL 生锈了——我有一个简单的要求来计算两列值中较大值的总和: CREATE TABLE [dbo].[Test] ( column1 int NOT NULL, column
我是一名优秀的程序员,十分优秀!