Sql 查找最常见的值,忽略';(';在其中
我试图找到最常见的字符串,它忽略了Sql 查找最常见的值,忽略';(';在其中,sql,sqlite,android-sqlite,Sql,Sqlite,Android Sqlite,我试图找到最常见的字符串,它忽略了()之后的所有内容 那么,它应该如何工作。如果我有字符串: England (88) Iceland (100) Iceland (77) England (88) Denmark (15) Iceland (18) 它应该会回来 Iceland 因为它是这里最常见的国家,不管怎样,英格兰(88岁)将假装是一个国家 不幸的是,我的查询返回 England(88) 我一直在考虑分两步进行: 截断每个国家/地区字符串 做我已经写过的脚本 但是我在第一步
(
)之后的所有内容
那么,它应该如何工作。如果我有字符串:
England (88)
Iceland (100)
Iceland (77)
England (88)
Denmark (15)
Iceland (18)
它应该会回来
Iceland
因为它是这里最常见的国家,不管怎样,英格兰(88岁)将假装是一个国家
不幸的是,我的查询返回
England(88)
我一直在考虑分两步进行:
但是我在第一步失败了。这是一系列字符串操作,在SQLite中相当麻烦。下面是一种方法:
select trim(substr(str, 1, instr(str, '(') - 1)) as country,
sum(cast(replace(substr(str + 1, instr(str, '('), ')', '') as int))
from t
group by trim(substr(str, 1, instr(str, '(') - 1));
SQL Fiddle出现问题,因此无法测试,但我认为您可以使用
SUBSTR()
和INSTR()
来隔离第一个的左侧部分(
:
编辑:在上测试并按预期返回
冰岛:。无论文本中是否包含('
),这都是防弹的
select rtrim(substr(mycolumn,1,instr(mycolumn || '(','(')-1))
from mytable
group by rtrim(substr(mycolumn,1,instr(mycolumn || '(','(')-1))
order by count(*) desc
limit 1
请尝试以下基于替换、rtrim和潜在的复制的解决方案
select rtrim(substr(replace(mycolumn,'(',replicate(' ',50)),1,50))
from mytable
group by rtrim(substr(replace(mycolumn,'(',replicate(' ',50)),1,50))
order by count(*) desc
limit 1
;
很抱歉,所有答案在Android中都不起作用:Android.database.sqlite.SQLiteException:没有这样的功能:instrow,精简的Android版本非常有限。thanx很多,但它在Android中不起作用,因为Android sqlite没有INSTR功能:(您使用的是哪个版本的SQLite?所以基本SQLite从3.7.15开始就有了它,但我猜Android版本已经精简了,没有Regex,没有INSTR()
。我猜您必须在数据库之外进行此操作。谢谢。我可以这样做。只需更改我的SQLite表即可。@Баааааааааааааааааа将国家存储在单独的
select rtrim(substr(replace(mycolumn,'(',replicate(' ',50)),1,50))
from mytable
group by rtrim(substr(replace(mycolumn,'(',replicate(' ',50)),1,50))
order by count(*) desc
limit 1
;
select rtrim(substr(replace(mycolumn,'(',' '),1,50))
from mytable
group by rtrim(substr(replace(mycolumn,'(',' '),1,50))
order by count(*) desc
limit 1
;