按最大值过滤分组 table 的最佳方法是什么?
What would be the best way to filter grouped table by its max values?
我有以下内容 table,它告诉我某部电影在某月有多少租借。这是前 10 行:
| month | title | rentals |
+-------+-------------------+---------+
| 2 | ACE GOLDFINGER | 1 |
| 2 | AFFAIR PREJUDICE | 1 |
| 2 | AFRICAN EGG | 1 |
| 2 | ALI FOREVER | 1 |
| 2 | ALONE TRIP | 1 |
| 2 | AMADEUS HOLY | 1 |
| 2 | AMERICAN CIRCUS | 1 |
| 2 | AMISTAD MIDSUMMER | 1 |
| 2 | ARMAGEDDON LOST | 1 |
| 2 | BAKED CLEOPATRA | 1 |
+-------+-------------------+---------+
我在这里的主要 objective 是创建一个新的 table,其中每个月都会为我提供该月租借次数最多的电影的标题 。
到目前为止,我尝试过组合使用 group by 查询,但收效甚微。尽管如此,我还是成功地创建了一个新的 table,它为我提供了顶级电影(或电影)在每个月的租借数量。这是:
CREATE VIEW temp AS (SELECT month, MAX(rentals) rentals FROM film_per_month GROUP BY 1);
mysql> SELECT * FROM temp;
+-------+---------+
| month | rentals |
+-------+---------+
| 2 | 2 |
| 5 | 5 |
| 6 | 7 |
| 7 | 16 |
| 8 | 13 |
+-------+---------+
5 rows in set (0.05 sec)
这里的障碍是我无法提取它来显示租借次数最多的电影的标题。
我试过使用内部连接修改它,self-joins,但我把它搞砸了。
所以我的问题是:创建一个新的 table 的更好方法是什么,每个月,它都会为我提供其中租借次数最多的电影的标题 月?
我认为您可以尝试使用 EXISTS
子查询来获取每个月行的 Max
租金。
SELECT t1.*
FROM film_per_month t1
WHERE EXISTS (
SELECT 1
FROM film_per_month tt
WHERE tt.month = t1.month
GROUP BY tt.month
HAVING MAX(tt.rentals) = t1.rentals
)
我有以下内容 table,它告诉我某部电影在某月有多少租借。这是前 10 行:
| month | title | rentals |
+-------+-------------------+---------+
| 2 | ACE GOLDFINGER | 1 |
| 2 | AFFAIR PREJUDICE | 1 |
| 2 | AFRICAN EGG | 1 |
| 2 | ALI FOREVER | 1 |
| 2 | ALONE TRIP | 1 |
| 2 | AMADEUS HOLY | 1 |
| 2 | AMERICAN CIRCUS | 1 |
| 2 | AMISTAD MIDSUMMER | 1 |
| 2 | ARMAGEDDON LOST | 1 |
| 2 | BAKED CLEOPATRA | 1 |
+-------+-------------------+---------+
我在这里的主要 objective 是创建一个新的 table,其中每个月都会为我提供该月租借次数最多的电影的标题 。
到目前为止,我尝试过组合使用 group by 查询,但收效甚微。尽管如此,我还是成功地创建了一个新的 table,它为我提供了顶级电影(或电影)在每个月的租借数量。这是:
CREATE VIEW temp AS (SELECT month, MAX(rentals) rentals FROM film_per_month GROUP BY 1);
mysql> SELECT * FROM temp;
+-------+---------+
| month | rentals |
+-------+---------+
| 2 | 2 |
| 5 | 5 |
| 6 | 7 |
| 7 | 16 |
| 8 | 13 |
+-------+---------+
5 rows in set (0.05 sec)
这里的障碍是我无法提取它来显示租借次数最多的电影的标题。
我试过使用内部连接修改它,self-joins,但我把它搞砸了。
所以我的问题是:创建一个新的 table 的更好方法是什么,每个月,它都会为我提供其中租借次数最多的电影的标题 月?
我认为您可以尝试使用 EXISTS
子查询来获取每个月行的 Max
租金。
SELECT t1.*
FROM film_per_month t1
WHERE EXISTS (
SELECT 1
FROM film_per_month tt
WHERE tt.month = t1.month
GROUP BY tt.month
HAVING MAX(tt.rentals) = t1.rentals
)