【问题标题】:Group by similar values按相似值分组
【发布时间】:2014-05-14 02:22:42
【问题描述】:

SQL 服务器 2012。

我正在将 UserAgent 捕获到我的数据库中,并尝试对其运行一些查询。

我想将 32 位和 64 位条目放在一起下面是它们在数据库中的显示方式。

Mozilla/5.0 (Windows NT 6.1; rv:26.0) Gecko/20100101 Firefox/26.0

Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0

我当前的查询:

Select     count(*) as counts, UA
from        mytable
group by    UA
order by    counts desc

有什么好的方法可以做到这一点?我可以在最后一个 X 字符上做一个子字符串吗?我的查询假设这些是不同的条目(这是我期望发生的)

【问题讨论】:

  • WOW64; 是唯一可能的更改,还是有其他类似的更改?
  • 我建议您为条目创建一个参考表,并对值的含义进行分类。
  • @shree.pat18 很可能只添加 WOW64
  • @GordonLinoff 我同意并且可能会在未来实施,你现在有什么?
  • 另外,我们有近 200,000 个独特的用户代理

标签: sql sql-server sql-server-2012


【解决方案1】:

假设WOW64; 是两个值之间唯一不同的子字符串,您可以在分组之前在字符串上使用REPLACE,如下所示:

Select     count(*) as counts, replace(UA,' WOW64;','')
from        mytable
group by    replace(UA,' WOW64;','')
order by    counts desc

但是,正如@GordonLinoff 在 cmets 中所说,更好的选择是创建一个参考表,为您认为相似的所有记录分配一个值,将其与您的表连接,然后按值列分组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-10
    • 2015-11-16
    • 2020-05-26
    相关资源
    最近更新 更多