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
    ;