如何检查MySQL中以前的记录?
我要分类的序列号。这意味着产出将减少如何检查MySQL中以前的记录?,mysql,sql,optimization,Mysql,Sql,Optimization,我要分类的序列号。这意味着产出将减少 有人能帮忙吗?一个非常好的解决方案是使用用户定义的变量,例如 +----+--------+----------+--------+ | ID | Name | Category | Count | +----+--------+----------+--------+ | 1 | Cat | Animal | 1 | | 2 | Loin | Animal | 2 | | 3 | Dog | Anim
有人能帮忙吗?一个非常好的解决方案是使用用户定义的变量,例如
+----+--------+----------+--------+
| ID | Name | Category | Count |
+----+--------+----------+--------+
| 1 | Cat | Animal | 1 |
| 2 | Loin | Animal | 2 |
| 3 | Dog | Animal | 3 |
| 4 | Red | Color | 1 |
| 5 | Hen | Bird | 1 |
| 6 | Parrot | Bird | 2 |
+----+--------+----------+--------+
基本上,您需要(分区)上的行数的等价物,您可以使用自连接和聚合:
select
id,
name,
category,
rn as `count`
from (
select
id,name,category,
@rn:= if(category = @prev_category,@rn+1,1) as rn,
@prev_category:= category
from my_table,(select @rn:=1,@prev_category:= null)x
order by category,id
)x
输出:
SELECT a.id, a.name, a.category, count(*) AS `Count`
FROM tab a
JOIN tab b
ON a.Category= b.Category AND a.ID >= b.ID
GROUP BY a.id, a.name, a.category;
我在查询检查中尝试使用上一个变量@s:=0,但问题出现在两个以上的名称中。
SELECT a.id, a.name, a.category, count(*) AS `Count`
FROM tab a
JOIN tab b
ON a.Category= b.Category AND a.ID >= b.ID
GROUP BY a.id, a.name, a.category;
╔════╦════════╦══════════╦═══════╗
║ ID ║ Name ║ Category ║ Count ║
╠════╬════════╬══════════╬═══════╣
║ 1 ║ Cat ║ Animal ║ 1 ║
║ 2 ║ Loin ║ Animal ║ 2 ║
║ 3 ║ Dog ║ Animal ║ 3 ║
║ 4 ║ Red ║ Color ║ 1 ║
║ 5 ║ Hen ║ Bird ║ 1 ║
║ 6 ║ Parrot ║ Bird ║ 2 ║
╚════╩════════╩══════════╩═══════╝