SELECT code a,count(code) num FROM sku group by left(code,7) having count(left(code,7))=2;
每个编码最后一位都是1和2,但是现在只显示1的,如何让2的也显示出来
例如:AA001-11、AA0001-12
count是用来计数的,只要不是空值,每行都会记为1,left(code,7) 返回的是code的前7位,比如 left('AA001-11',7) 返回的是 'AA001-1',
group by left(code,7) 这个表示,每个left(code,7) 只会显示一行,按照标准sql来说,你这个语法是错误的,因为你select了code这个字段,但是code又没放在group by 后面,由于同一个left(code,7)会有多个code,但又只能显示一个code,因此在老版本的mysql里会随机显示一个code。
我猜你是不想改变数据行数,但是要统计每一行的code前7位相同的有多少行吧?
一般在本行体现非本行的数据,要用到开窗函数,mysql版本需要在8.0版本以上,但是你这个sql既然能执行,说明大概率是用的老版本,不支持开窗函数,那么就只能写个子查询再关联了
select * from sku a join (
SELECT left(code,7) lf,count(1) num FROM sku group by left(code,7) having count(1)=2) b
on left(a.code,7)=b.lf;
如果是mysql8.0以上,可以用下面的sql
select * from
SELECT sku.*,count(1) over(partition by left(code,7)) num FROM sku)
where num=2
AA0001-12 不出来大概率是分组之后总数不是2被过滤了,你的描述和数据也不完整