九色91_成人精品一区二区三区中文字幕_国产精品久久久久一区二区三区_欧美精品久久_国产精品99久久久久久久vr_www.国产视频

Hello! 歡迎來到小浪云!


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


avatar
小浪云 2024-11-11 191

如何將多條查詢同一表不同分組結果的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;
登錄后復制

相關閱讀

主站蜘蛛池模板: 亚洲网站免费看 | 狠狠操av| 国产三区精品 | 久久精彩视频 | 欧美日产国产成人免费图片 | 国产精品永久在线观看 | 欧美中文一区 | 国产在线a视频 | 欧美一级在线观看 | 黄色91在线 | 在线播放中文字幕 | 精品欧美色视频网站在线观看 | 免费一区 | 成人性视频免费网站 | 中文字幕11页 | 国产最新视频在线 | 在线午夜| 欧美性影院 | 国产91一区 | 影音先锋中文字幕在线观看 | 毛片综合| 久热中文字幕 | 另类在线 | 九九热在线观看视频 | 成人影院在线观看 | 久久成 | 国产精品乱码一区二三区小蝌蚪 | 久久精品免费观看 | 91视频一区| av一二三区 | 色综合视频在线 | 亚洲高清av | 日本一二三区电影 | 中文字幕的av | 黄色免费网站在线看 | 亚洲国产欧美一区 | 欧美精品一区二区三区四区五区 | 中文字幕av色 | 久久av影院 | 国产99精品 | 亚洲精品毛片av |