当前位置: 首页 > 知识库问答 >
问题:

mysql - 这样多条MYSQL语句能不能一句SQL搞定?

耿招
2024-09-17
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 每句SQL查询20条

共有1个答案

师成弘
2024-09-17

方法1:
mysql >= 8.0

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;
 类似资料:
  • 帮忙看看 这三句mysql能不能写成一句? 感觉执行3次影响效率,不知道为什么写成一句,该怎么写?

  • 我使用的是+++。 我得到了4个DELETE,只想要一个数据库请求,所以我用一个“;”连接了DELETE命令...但总是失败。 它会抛出以下错误: 但如果我将此SQL粘贴到PhpMyAdmin中,它总是成功的... 如果我在单个查询中编写它,它也会成功。 多谢帮忙!

  • 本文向大家介绍一条sql语句完成MySQL去重留一,包括了一条sql语句完成MySQL去重留一的使用技巧和注意事项,需要的朋友参考一下 前几天在做一个需求的时候,需要清理mysql中重复的记录,当时的想法是通过代码遍历写出来,然后觉得太复杂,心里想着应该可以通过一个sql语句来解决问题的。查了资料,请教了大佬之后得出了一个很便利的sql语句,这里分享下这段sql语句和思路。 需求分析 数据库中存在

  • 本文向大家介绍用一条mysql语句插入多条数据,包括了用一条mysql语句插入多条数据的使用技巧和注意事项,需要的朋友参考一下        假如有一个数据表A: id name title addtime         如果需要插入n条数据 :    之前我的想法会是,通过数据构造多条插入语句,循环调用 。如:         之后发现了sql的insert语句可以一次插入多条:       

  • 本文向大家介绍mysql sql语句性能调优简单实例,包括了mysql sql语句性能调优简单实例的使用技巧和注意事项,需要的朋友参考一下  mysql sql语句性能调优简单实例 在做服务器开发时,有时候对并发量有一定的要求,有时候影响速度的是某个sql语句,比如某个存储过程。现在假设服务器代码执行过程中,某个sql执行比较缓慢,那如何进行优化呢? 假如现在服务器代码执行如下sql存储过程特别缓

  • 问题内容: 我正在使用+ + + 。 我有4个DELETE,并且只需要1个数据库请求,因此我将DELETE命令与“;” …相连,但是它总是失败。 它引发此错误: 但是,如果我将此SQL粘贴到PhpMyAdmin中,它将始终成功… 如果我在单个查询中写它也是成功的。 感谢帮助! 问题答案: 我猜您正在使用node-mysql。( 但也应该适用于 node- mysql2 ) 该文件说: 出于安全原因

  • 问题内容: 有可能用一个SQL语句,多个表截断吗? 像这样: 问候 问题答案: 不可以,您只能使用TRUNCATE命令截断单个表。要截断多个表,可以使用T-SQL并遍历表名以一次截断每个表名。 您可以在@tableList变量中用逗号分隔所有表名,是的,如果有前缀,则可以截断来自不同模式的多个表。

  • 我正在尝试将多列添加到phpMyAdmin中的现有表中,但我一直收到相同的错误: #1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册以获取正确的语法... 我在写: 我已经参考了过去在StackOverflow上的帖子,我正在遵循专家的建议,那么为什么我会出错呢?