代码之家  ›  专栏  ›  技术社区  ›  Luke Rehmann

选择MySQL中特定列的匹配行数

  •  1
  • Luke Rehmann  · 技术社区  · 8 年前

    我的桌子:

    +---------+----------------+
    | id      | category       |
    +---------+----------------+
    | 3611383 | AAAAAAAAAAAAAA |
    | 3611382 | AAAAAAAAAAAAAA |
    | 3611381 | AAAAAAAAAAAAAA |
    | 3611378 | AAAAAAAAAAAAAA |
    | 3611377 | AAAAAAAAAAAAAA |
    | 3611376 | AAAAAAAAAAAAAA |
    | 3611374 | AAAAAAAAAAAAAA |
    | 3611373 | AAAAAAAAAAAAAA |
    | 3611372 | BBBBBBBBBBBBBB |
    | 3611371 | BBBBBBBBBBBBBB |
    | 3611370 | BBBBBBBBBBBBBB |
    | 3611369 | BBBBBBBBBBBBBB |
    | 3611366 | CCCCCCCCCCCCCC |
    | 3611365 | CCCCCCCCCCCCCC |
    | 3611364 | CCCCCCCCCCCCCC |
    +---------+----------------+
    

    期望输出:

    +---------+----------------+---------+
    | id      | category       | count   |
    +---------+----------------+---------+
    | 3611383 | AAAAAAAAAAAAAA | 8       |
    | 3611382 | AAAAAAAAAAAAAA | 8       |
    | 3611381 | AAAAAAAAAAAAAA | 8       |
    | 3611378 | AAAAAAAAAAAAAA | 8       |
    | 3611377 | AAAAAAAAAAAAAA | 8       |
    | 3611376 | AAAAAAAAAAAAAA | 8       |
    | 3611374 | AAAAAAAAAAAAAA | 8       |
    | 3611373 | AAAAAAAAAAAAAA | 8       |
    | 3611372 | BBBBBBBBBBBBBB | 4       |
    | 3611371 | BBBBBBBBBBBBBB | 4       |
    | 3611370 | BBBBBBBBBBBBBB | 4       |
    | 3611369 | BBBBBBBBBBBBBB | 4       |
    | 3611366 | CCCCCCCCCCCCCC | 3       |
    | 3611365 | CCCCCCCCCCCCCC | 3       |
    | 3611364 | CCCCCCCCCCCCCC | 3       |
    +---------+----------------+---------+
    

    我得到的最接近的是

    SELECT id, category, count(category) AS c FROM mytable ORDER BY id DESC;
    

    但这只会产生一行:

    +---------+----------------+---------+
    | id      | category       | c       |
    +---------+----------------+---------+
    | 3611383 | AAAAAAAAAAAAAA | 8       |
    +---------+----------------+---------+
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   Gordon Linoff    8 年前

    一种方法是相关子查询:

    select t.*,
           (select count(*) from mytable t2 where t2.category = t.category) as c
    from mytable t;
    

    另一种选择是 group by join . 相关子查询的一个优点是,它可以很容易地利用上的索引 mytable(category) .