代码之家  ›  专栏  ›  技术社区  ›  Gabriel Solomon

按选择分组后统计总记录数

  •  15
  • Gabriel Solomon  · 技术社区  · 14 年前

    我有一个mysql select查询,它有一个groupby。 我想计算group by语句之后的所有记录。 有没有一种直接从MySQL实现的方法?

    谢谢。

    3 回复  |  直到 13 年前
        1
  •  10
  •   Frank Shearar    14 年前

    你可以用 FOUND_ROWS() :

    SELECT <your_complicated_query>;
    SELECT FOUND_ROWS();
    

    它实际上是为使用limit而设计的,它告诉您如果不使用limit,会返回多少行,但对于不使用limit的查询,它似乎可以正常工作。

        2
  •  25
  •   CobaltBlueDW    13 年前

    如果您只需要分组后的计数,并且不想使用两个单独的查询来查找答案。你可以用这样的子查询来完成它…

    select count(*) as `count`
    from (
        select 0 as `doesn't matter`
        from `your_table` yt
        group by yt.groupfield
    ) sq
    

    注意:您必须在子查询中选择一些内容,但是您选择的内容并不重要。

    注意:所有临时表都必须有一个命名别名,因此末尾的“sq”

        3
  •  2
  •   Frank Shearar    14 年前

    有关示例,请参见此查询:

    此查询用于查找酒店的可用房间记录,只需检查此

    SELECT a.type_id, a.type_name, a.no_of_rooms,
           (SELECT SUM(booked_rooms) FROM reservation
           WHERE room_type = a.type_id
           AND start_date >= '2010-04-12'
           AND end_date <= '2010-04-15') AS booked_rooms,
           (a.no_of_rooms - (SELECT SUM(booked_rooms)
                      FROM reservation
                  WHERE room_type = a.type_id
                  AND start_date >= '2010-04-12'
                  AND end_date <= '2010-04-15')) AS freerooms
    FROM room_type AS a
    LEFT JOIN reservation AS b
    ON a.type_id = b.room_type
    GROUP BY a.type_id ORDER BY a.type_id