【问题标题】:How to GROUP BY a string part in MySQL如何在 MySQL 中对字符串部分进行 GROUP BY
【发布时间】:2016-04-21 08:18:59
【问题描述】:

编辑:

假设你有下表:

id  string         number
1   stuff::a::312  5 
2   stuff:::a::312 6
3   stuff::a::233  2
4   stuff:b::213   1
5   stuff::b::222  1
6   stuff::c       5

以下当然不起作用:

SELECT string, COUNT(*)
FROM tbl
-- WHERE
GROUP BY string;

希望的结果:

string numbers
a      13
b      2
c      5

对不起,但请注意,c 之后没有 :: 但之前,就像其余的一样

【问题讨论】:

  • 如果前面的字符stuff::?:: 是字符串列中值的标准格式/长度,您也可以使用LEFT(string,10)RIGHT(string,3) 反之亦然:)

标签: mysql string group-by


【解决方案1】:

如果模式相同,您可以执行以下操作

select 
substring_index(string,'::',1) as string_val,
sum(number) as number
from mytable
group by string_val

【讨论】:

  • 这就像一个魅力!由于我添加了“suff::a::” substring_index(string, '::',2) 是我的情况的正确答案。谢谢!
  • 好吧,如果您的问题中的模式发生了变化,那么您需要substring_index(substring_index(string,'::',2),'::',-1)
【解决方案2】:

您可以像这样使用 SUBSTRING_INDEX() 来做到这一点:

SELECT string, COUNT(*)
FROM tbl
-- WHERE
GROUP BY SUBSTRING_INDEX(string, '::', 1);

【讨论】:

    【解决方案3】:

    请尝试以下方法:

    select substr(string,1,1)
         , count(*)
      from tbl
     group by 1
         ;
    

    【讨论】:

      【解决方案4】:

      只需使用 substr 即可:

      SELECT substr(string,1, 1), COUNT(*)
      FROM tbl
      -- WHERE
      GROUP BY substr(string,1, 1);
      

      或更复杂的SUBSTRING_INDEX:

      SELECT SUBSTRING_INDEX(string, '::', 1), COUNT(*)
      FROM tbl
      -- WHERE
      GROUP BY SUBSTRING_INDEX(string, '::', 1);
      

      【讨论】:

        【解决方案5】:
        select left(string,1),count(*) from table where string is not null group by left(string,1) order by left(string,1) 
        

        我希望这会有所帮助, LEFT(string) 只取最左边的字符

        【讨论】:

        • 如果我从左边数字符,这实际上有效,谢谢。但是知道左边的字符数是否未知吗?
        猜你喜欢
        • 2021-01-20
        • 2013-02-22
        • 2010-09-14
        • 2023-03-18
        • 2012-07-22
        • 2014-08-21
        • 2021-06-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多