用计数化简 select

Simplify select with count

我需要从数据库中获取一些值并计算所有行数。

我写了这段代码:

SELECT author, alias, (select COUNT(*) from registry WHERE status='OK' AND type='H1') AS count
FROM registry
WHERE status='OK' AND type='H1'

它可以工作,但是,我该如何简化这段代码?既WERE条件其。

试试这个:

SELECT author, alias, count(1) AS caunt
FROM registry
WHERE status='OK' AND type='H1'
group by author, alias

statustype 是从 table 中提取字段的条件。你不能比这更简单了。

尝试使用分组依据,

SELECT author, alias, COUNT(*) AS COUNT
FROM registry
WHERE STATUS='OK' AND TYPE='H1'
GROUP BY author, alias

根据您的 table 设置方式,您实际上可能需要这样做才能获取您正在寻找的数据。

一些好的读物:https://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html

但是,如果您希望计数只是符合该条件的所有记录,那么您所拥有的可能已经是最简单的了。

如果查询返回您需要的结果集,行数 "total"(独立于作者和别名),每行重复 "count" 相同的精确值,我们可以像这样重写查询:

SELECT t.author
     , t.alias
     , s.count
  FROM registry t
 CROSS
  JOIN ( SELECT COUNT(*) AS `count`
           FROM registry c
          WHERE c.status='OK'
            AND c.type='H1'
       ) s
 WHERE t.status='OK'
   AND t.type='H1'

我不知道这是否更简单,但对于阅读该声明的人来说,我认为它使返回的结果集更加清楚。

(我也倾向于避免在 SELECT 列表中使用任何子查询,除非有特定的原因需要添加一个。)

这个查询的结果集有点奇怪。但是除了原始查询之外,没有任何示例数据、预期输出或任何规范,我们只是猜测。我回答中的查询以更清晰的方式复制了原始查询的结果。