找到最常见的价值,忽略了所有内容('在其中)

时间:2017-02-09 16:18:09

标签: sql sqlite android-sqlite

我正在尝试找到最频繁的字符串,忽略其中(之后的所有内容。

那么,它应该如何运作。如果我有字符串:

England (88)
Iceland (100) 
Iceland (77) 
England (88)
Denmark (15) 
Iceland (18)

它应该返回

Iceland

因为它是这里最常见的国家,不管是英格兰(88)会假装的字符串。

不幸的是,我的查询返回

England(88)

SQLfiddle

我一直在想通过两个步骤来做到这一点:

  1. 截断每个国家/地区字符串
  2. 做我已写过的脚本。
  3. 但是我在第一步失败了。

4 个答案:

答案 0 :(得分:1)

这是一堆字符串操作,在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));

答案 1 :(得分:1)

SQL Fiddle正在表现,因此无法测试,但我认为您可以使用SUBSTR()INSTR()来隔离第一个{{1}的左侧部分}:

(

修改:在https://sqliteonline.com/上进行了测试,并按预期返回SELECT SUBSTR(X,1,INSTR(X,'(')-1) AS HUS FROM tt GROUP BY SUBSTR(X,1,INSTR(X,'(')-1) ORDER BY COUNT(*) DESC LIMIT 1; Fiddle

答案 2 :(得分:1)

无论您的文字中是'('还是

,这都是防弹的
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

答案 3 :(得分:0)

请根据替换 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
;
select      rtrim(substr(replace(mycolumn,'(','                                                  '),1,50))
from        mytable
group by    rtrim(substr(replace(mycolumn,'(','                                                  '),1,50))
order by    count(*) desc
limit       1
;