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:
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 ) 该文件说: 出于安全原因