[英]MySQL Group by, Order by Two Columns
我想獲得每部電影的最后一集的名字
表結構:
+---------+------------+---------------+
| id | movie_id | episode_name |
+---------+------------+---------------+
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 1 | 3 |
| 4 | 2 | 1 |
| 5 | 3 | 1 |
| 6 | 2 | 2 |
| 7 | 1 | 4 |
| 8 | 2 | 3 |
| 9 | 4 | 1 |
+---------+------------+---------------+
查詢1:
SELECT * FROM episode
group by movie_id
order by id desc, episode_name desc LIMIT 10
查詢2:
SELECT * FROM episode
WHERE movie_id IN (select movie_id from episode group by movie_id)
group by movie_id
order by episode_name desc
但是輸出不是我想要的,也許我做錯了
+--------+------------+---------------+
| id | movie_id | episode_name |
+--------+------------+---------------+
| 9 | 4 | 1 |
| 5 | 3 | 1 |
| 4 | 2 | 1 |
| 1 | 1 | 1 |
+--------+------------+---------------+
我想要的結果是:
+---------+------------+---------------+
| id | movie_id | episode_name |
+---------+------------+---------------+
| 9 | 4 | 1 |
| 8 | 2 | 3 |
| 7 | 1 | 4 |
| 5 | 3 | 1 |
+---------+------------+---------------+
這是一個非常普遍的問題,我們可以在MySQL中處理此問題,方法是將episode
表連接到一個子查詢,該子查詢查找每部電影的最新情節。 這種方法為我們提供了完全匹配的最新記錄,包括id
列,然后可以用來對結果集進行排序。
SELECT e1.*
FROM episode e1
INNER JOIN
(
SELECT movie_id, MAX(episode_name) AS max_episode_name
FROM episode
GROUP BY movie_id
) e2
ON e1.movie_id = e2.movie_id AND
e1.episode_name = e2.max_episode_name
ORDER BY
e1.id DESC;
如果只需要最后一個Episode_name,並且我遵循表的邏輯,則可以嘗試在SELECT查詢中使用MAX(),因此您將只獲得列“ episode_name”的MAX結果( 此處的模式信息)
SELECT id, movie_id, MAX(episode_name)
FROM table GROUP BY movie_id
ORDER BY id DESC
這是您要找的東西嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.