【问题标题】:Is there a similar count method in SQL like mysql_num_rowSQL中是否有类似的计数方法,如mysql_num_row
【发布时间】:2011-03-30 18:50:53
【问题描述】:

我正在使用 SQL,我想在没有循环的情况下计算行数。我似乎无法让“COUNT”关键字工作,但我知道在 MySQL mysql_num_row 中可以做到这一点。 SQL中是否有类似mysql_num_row的方法?

【问题讨论】:

    标签: sql database count


    【解决方案1】:
    SELECT COUNT(*) FROM tablename
    

    这将计算表“tablename”中的行/条目数

    有关更多信息,请查看手册: http://dev.mysql.com/doc/refman/5.1/en/counting-rows.html

    [编辑] 正如 Ken White 所建议的,您当然可以通过添加 WHERE 子句来缩小结果记录集的范围

    【讨论】:

    • +1。作为补充,您也可以使用 WHERE 子句进行限定:SELECT COUNT(*) FROM tablename WHERE SomeCondition
    【解决方案2】:

    给定任何查询

    select ..
    from .. multiple ..
    where .. group by.. order by..
    limit ..
    

    将其包装在子查询中,并在其上使用 COUNT(*)

    select count(*) from (
    
    select ..
    from .. multiple ..
    where .. group by.. order by..
    limit ..
    
    ) X
    

    ) X 位是根据语法要求给它一个别名。当然,如果您的原始查询以 ; 结尾,请将其从子查询中删除。

    【讨论】:

    • Ummm... 当您可以只在 count() 查询本身中进行过滤时,为什么要对单个查询进行一对查询?尝试两者,并查看他们的计划。 (不要投反对票,因为它在技术上是正确的,但 IMO 不是一个好主意。)
    • @Ken - 这是一种通用方法。考虑一个以SELECT a, b, sum(c), min(D) .... group by a,b 开头的复杂查询 - 你把COUNT(*) 放在这里了吗?仅供参考,mysql_num_rows 适用于任何查询,因此是匹配的通用答案。
    • @Ken:某些查询可能不容易更改,因此对查询本身进行计数。我想如果将子查询作为字段或使用 DISTINCT,它们是否非常复杂。我相信理查德可以提供一个例子。
    • 感谢您澄清您的推理;我不是 MySQL/PHP 合格的 ;)。我可能会将其添加为答案的一部分。 @ypercube:同意。你们俩:根据所提出的问题,我认为没有必要增加复杂性。 :)
    猜你喜欢
    • 2013-06-07
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-29
    • 2016-01-08
    • 2016-09-06
    • 1970-01-01
    相关资源
    最近更新 更多