【问题标题】:GROUP BY problem with varchar使用 varchar 的 GROUP BY 问题
【发布时间】:2010-07-23 21:21:26
【问题描述】:

有一些链接作为 varchars 存储在数据库中。通过这些链接,我想使用 GROUP BY。

http://example.com
http://example.com
http://example.com

对该数据的 SQL:

SELECT COUNT(*) c, Url
    FROM Advertisements
    GROUP BY Url

我想要这个输出:

c Url 
3 http://example.com

但我却得到了 3 次:

c Url 
1 http://example.com

为什么 SELECT 不对 varchar 字段进行分组?它们是相同的,但 GROUP BY 没有检测到这一点。有什么想法吗?

【问题讨论】:

  • 您能否将实际的数据粘贴到您的问题中?
  • 大声笑..这些链接不是很有用
  • 我想帮忙,但这对我来说没有任何意义。请更新您的数据在表中的内容、您正在使用的查询以及您想要的最终结果。
  • 不,此链接不可点击。这是存储在数据库中的链接,我用于分组。
  • 不需要实际的 URL。

标签: tsql


【解决方案1】:

如果包含这些 URL 的字符串是存储的数据,它们不是同一个 url,每个都是不同的,因此 group by 会将每个放在不同的组中。

【讨论】:

    【解决方案2】:

    结局不一样

    7​i18704

    5​i18704

    4​i18704

    根据您的评论,我已更新,他们按预期分组。当你尝试这个时,你会得到什么?

    CREATE TABLE #Advertisements
    (
    ID INT IDENTITY(1,1),
    Url VARCHAR(200)
    )
    
    INSERT INTO #Advertisements VALUES
    ('http://example.com')
    
    INSERT INTO #Advertisements VALUES
    ('http://example.com')
    
    INSERT INTO #Advertisements VALUES
    ('http://example.com')
    
    
    
    SELECT COUNT(*) c, Url
        FROM #Advertisements
        GROUP BY Url
    

    【讨论】:

      【解决方案3】:

      就像 HLGEM 和 Martin 说的那样,字段中的整个文本必须相同,以便 GROUP BY 起作用,您可以使用 GROUP BY SUBSTRING(Url, 0, 30) 之类的东西,这样您就会得到:

      网址 |计数

      http://example.com | 3

      【讨论】:

        猜你喜欢
        • 2019-12-02
        • 2012-10-02
        • 1970-01-01
        • 2010-11-10
        • 2010-12-18
        • 2014-11-26
        • 1970-01-01
        • 2011-01-03
        • 2019-02-11
        相关资源
        最近更新 更多