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

Hello! 歡迎來到小浪云!


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


avatar
小浪云 2024-11-11 169

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

相關閱讀

主站蜘蛛池模板: 91一区 | 久久久久国产一区二区三区四区 | 亚洲精品欧美一区二区三区 | 婷婷在线视频 | 精品久久久久久亚洲精品 | 免费观看av | 亚洲一区二区在线免费观看 | av黄色在线观看 | 婷婷久久五月天 | 国产精品亚洲视频 | 国产高清一区二区三区 | 亚洲综合视频 | 中文字幕乱码视频32 | 精品一区二区三区在线观看 | 亚洲一区久久久 | 国产精品久久久久久久久久免费看 | 久久99国产精品久久99果冻传媒 | 亚洲美女天堂网 | 免费激情| 91久久精品一区二区二区 | 黄免费观看视频 | 亚洲成网 | 日韩av一区二区在线 | 国产精品一区在线 | 欧美久久精品一级黑人c片 91免费在线视频 | 在线观看成人精品 | 亚洲va在线va天堂va狼色在线 | 亚洲av毛片成人精品 | 久久久久网站 | 天天夜碰日日摸日日澡 | 91精品久久久久 | 四虎影院在线播放 | 福利网址 | 国产成人精品一区二区 | 一区二区精品 | 国产精品999 | 婷婷丁香在线视频 | 中文字幕第7页 | 中文字幕a√ | 亚洲欧美日韩久久 | 亚洲成人综合社区 |