使用表达式的一部分进行分组
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 秒。 我开始了解它是如何在这里工作的!但是,您的查询仍然不同。哪一个有效,取决于表中的所有值。也就是说,该表中的所有值都将存在。以上是关于使用表达式的一部分进行分组的主要内容,如果未能解决你的问题,请参考以下文章