如何將多條查詢同一表不同分組結果的SQL語句合并成一條語句執行?

如何將多條查詢同一表不同分組結果的SQL語句合并成一條語句執行?

mysql語句合并優化

問題:給定多條查詢同一表不同分組結果的sql語句,能否將其合并成一條sql語句執行?

select *, count(*) as count from t_search where mark = 'a' group by title order by count desc limit 0, 20  select *, count(*) as count from t_search where mark = 'b' group by title order by count desc limit 0, 20  select *, count(*) as count from t_search where mark = 'c' group by title order by count desc limit 0, 20  ...

總共有24條sql語句,每個查詢的mark字段從a到z,每條語句查詢20條結果。

解答:

方法1:mysql 8.0+

使用with子句和窗口函數:

with ranked_data as (     select *,            count(*) over (partition by title, mark) as count,            row_number() over (partition by mark order by count(*) desc) as row_num     from t_search     where mark between 'a' and 'z'     group by title, mark ) select * from ranked_data where row_num <= 20 order by mark, count desc;

方法2:mysql 8.0以下

使用變量和子查詢:

SELECT * FROM (     SELECT *,            @rank := IF(@prev_mark = mark, @rank + 1, 1) AS rank,            @prev_mark := mark,            COUNT(*) AS count     FROM t_search     JOIN (SELECT @rank := 0, @prev_mark := '') AS vars     WHERE mark BETWEEN 'a' AND 'z'     GROUP BY title, mark     ORDER BY mark, count DESC ) AS ranked_data WHERE rank <= 20 ORDER BY mark, count DESC;

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享