【问题标题】:Is it possible to select a count on rows that are similar in MySQL?是否可以对 MySQL 中相似的行进行计数?
【发布时间】:2017-03-11 10:53:20
【问题描述】:

我有一个非常简单的表格,用于记录页面访问者输入的邮政编码。邮政编码总是看起来像 DDDDCC,其中 D = digit 和 C = char。我想为每一行选择一个计数,以显示有多少邮政编码与那个相似。

  • 我知道我需要使用 SUBSTRING(postcode, 1, 4) 来获取前 4 位数字,但我不知道如何从那里继续

表结构(带有示例数据)

postcode  ip               datum                
--------  ---------------  ---------------------
1651ZX    8X.26.1X4.9X     2017-03-02 22:18:02  
1028HN    84.26.104.9X     2017-03-02 22:19:32  
1871EN    84.26.104.9X     2017-03-02 22:41:47  
1651QQ    84.2X.104.9X     2017-03-02 22:46:35  
1651ZX    188.206.X1.10X   2017-03-02 23:27:07  
1111AB    217.110.X01.13X  2017-03-03 09:12:19  
1871AA    188.206.X0.22X   2017-03-04 21:48:34  
1028HN    188.206.X0.22X   2017-03-04 23:42:19  
1823KA    84.105.X01.1X    2017-03-09 12:28:06  
1871EN    84.105.X01.1X    2017-03-09 12:29:13  
1823JM    84.105.X01.1X    2017-03-09 12:29:40  
1818AJ    84.105.201.14    2017-03-09 12:30:50  
1651ZX    84.105.201.14    2017-03-10 09:17:38 

我的预期输出是(如果我犯了错误,请原谅我)

postcode    count
--------    -------
1651ZX         4
3028HN         2
1871EN         3
1651QQ         4
1651ZX         4
1111AB         1
1871AA         3
3028HN         2
1823KA         2
1871EN         3
1823JM         2
1818AJ         1
1651ZX         4

但是我该怎么做呢?

【问题讨论】:

    标签: mysql count subquery


    【解决方案1】:
    SELECT t1.postcode, t2.post_count
    FROM yourTable t1
    INNER JOIN
    (
        SELECT SUBSTRING(postcode, 1, 4) AS code,
               COUNT(*) AS post_count
        FROM yourTable
        GROUP BY SUBSTRING(postcode, 1, 4)
    ) t2
        ON SUBSTRING(t1.postcode, 1, 4) = t2.code
    

    演示在这里:

    Rextester

    【讨论】:

    • 这很完美,非常感谢!我从中学到了很多。
    【解决方案2】:

    您可以使用 group by 子句

    SELECT postcode, COUNT(postcode) as `count`
    FROM table
    GROUP BY SUBSTRING(postcode, 1, 4)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-24
      • 2017-06-15
      • 1970-01-01
      • 1970-01-01
      • 2016-04-09
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      相关资源
      最近更新 更多