在MySQL中,我們可以使用LIMIT來限制查詢結果返回的行數,但是如果想要分組查詢并返回每組前N條記錄,該怎么實現呢? MySQL提供了子查詢和變量來實現這個功能。
SELECT * FROM (SELECT *, @num := IF(@group = group_name, @num + 1, 1) AS row_number, @group := group_name AS dummy FROM table_name CROSS JOIN (SELECT @group := '', @num := 0) AS init ORDER BY group_name, sort_key) AS t WHERE row_number<= N;
以上SQL語句首先將子查詢中的@group和@num變量初始化為一個空字符串和0。然后,在SELECT子句中使用IF語句對@num進行累加,并將其命名為row_nubmer。
當變量@group與表中group_name不同時,將其更新為當前group_name值。由于MySQL中是按照ORDER BY子句指定的字段排序的,因此查詢結果相同group_name的行將被放在一起。
最后,在外部查詢中將結果限制為前N行,并返回結果。
通過這種方式,我們可以方便地實現查詢每個組的前N條記錄的功能。
上一篇mysql 分組取第一條
下一篇3868mysql數據庫