姓名字段(xm)内容如下: 小明
小红
赵大
赵二
赵三
张三
张四
张五
...... 请教能不能写个GROUP by语句把 ‘小’ 开头的,‘赵’ 开头,‘张’ 开头的名字一次GROUP BY 出来.我想要的结果集合是:
小% count出总数
张% count出总数
赵% count出总数
小红
赵大
赵二
赵三
张三
张四
张五
...... 请教能不能写个GROUP by语句把 ‘小’ 开头的,‘赵’ 开头,‘张’ 开头的名字一次GROUP BY 出来.我想要的结果集合是:
小% count出总数
张% count出总数
赵% count出总数
GROUP by substr(xm,1,1)
select substr(xm,1,1)||'%' 开头,count(1) 总数 GROUP by substr(xm,1,1)
GROUP by substr(xm,1,1)也可以。
粗心,掉了from table
select substr(xm,1,1)||'%' 开头,count(1) 总数 from table GROUP by substr(xm,1,1)
sun说的不错,需要特别注意自己数据库所设的字符集是哪种!
李小红
李王大赵
胡二赵
李牛三赵
李三一张一
四一张一
五一张二
...... 我想要的结果集合是:
%小% count出总数
%赵% count出总数
%张% count出总数
李小红
李王大赵
胡二赵
李牛三赵
李三一张一
四一张一
五一张二
...... 我想要的结果集合是:
%小% count出总数
%赵% count出总数
%张% count出总数
when a.name like '小%' then
a.name
else
null
end) as xiao
count
from table a你依次在把其它的这样做,用个case就能把人数求出来了
when a.name like '小%' then
a.name
else
null
end) as xiao
from table a
上面写错了,不好意思
from(
select
case
when instr(xm, '小') > 0 then '小'
when instr(xm, '光') > 0 then '赵'
when instr(xm, '开') > 0 then '张'
else null
end as xm
from youtable
)
group by xm
having xm is not null;
如果‘小’、‘赵’、‘张’可能出现在一个字符串里,那就不太好办了。
WHEN N LIKE '%小%' THEN
'%小%'
WHEN N LIKE '%赵%' THEN
'%赵%'
WHEN N LIKE '%张%' THEN
'%张%'
ELSE
'sss'
END,
COUNT(1)
FROM (SELECT '陈小明' N
FROM DUAL
UNION ALL
SELECT '李小红' N
FROM DUAL
UNION ALL
SELECT '李王大赵' N
FROM DUAL
UNION ALL
SELECT '胡二赵' N
FROM DUAL
UNION ALL
SELECT '李牛三赵' N
FROM DUAL
UNION ALL
SELECT '李三一张一' N
FROM DUAL
UNION ALL
SELECT '四一张一' N
FROM DUAL
UNION ALL
SELECT '五一张二' N FROM DUAL)
GROUP BY CASE
WHEN N LIKE '%小%' THEN
'%小%'
WHEN N LIKE '%赵%' THEN
'%赵%'
WHEN N LIKE '%张%' THEN
'%张%'
ELSE
'sss'
END
这里是substr,不是substrb,所以这里的1是指的字符长度,所以是安装字符集的标准取一个字符。也就没有字符集的问题叻。