使用表达式的一部分进行分组

Posted

技术标签:

【中文标题】使用表达式的一部分进行分组【英文标题】:Group by using parts of the expression 【发布时间】:2015-02-05 19:38:10 【问题描述】:

我有一张这样的桌子:

         Name              Count
23feb.01.04.(33.03.03)       1
23feb.09.(12.04.06)          9
23feb.02.09.(25.06)          1
23feb.01.02.04               2
23feb.01.02                 48
23feb.02.13                  4
23feb.01.04.(33.03.10)       1
23feb.01.04.(33.03.06)       1
23feb.02                    48
23feb.02.07                 12
23feb.01.04.(33.03.01)       1
23feb.02.02                  3
23feb.02.04                 11
23feb                      279
23feb.02.06                  3
23feb.03                    83

有没有什么方法可以使用group by 函数来获取更高级别的Name 字符串的聚合结果?所以,理想的结果是:

  Name                     Count
  23feb                     507

怎么做?

【问题讨论】:

是使用group by和SQL的字符串函数SubString 【参考方案1】:

要避免使用Like 通配符,您可以使用LEFT

  SELECT  LEFT(name,5), COUNT(*)
  FROM     my_table
  GROUP BY LEFT(name,5)

【讨论】:

就是这样,除了对列进行分组,您还可以对列上的函数进行分组,就像上面发生的那样。使用 LEFT 或 SUBSTR 正是您的选择。一旦你按它分组,它就会成为被放入 SELECT 部分的候选者,就像也显示的那样。【参考方案2】:

您可以查询的任何(行)表达式也可以按表达式分组:

SELECT   SUBSTR(name, 1, INSTR(name, '.')), COUNT(*)
FROM     my_table
GROUP BY SUBSTR(name, 1, INSTR(name, '.'))

【讨论】:

如此接近,领先 9 秒。 我开始了解它是如何在这里工作的!但是,您的查询仍然不同。哪一个有效,取决于表中的所有值。也就是说,该表中的所有值都将存在。

以上是关于使用表达式的一部分进行分组的主要内容,如果未能解决你的问题,请参考以下文章

一个简单的正则表达式解决方案,用于在 javascript 中进行数字分组和验证

python五十八课——正则表达式(分组)

使用正则表达式分组结构匹配部分字符串

正则 : 分组与引用

Python爬虫编程思想(32):正则表达式的分组

正则表达式——断言补充