用计数化简 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
status 和 type 是从 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 列表中使用任何子查询,除非有特定的原因需要添加一个。)
这个查询的结果集有点奇怪。但是除了原始查询之外,没有任何示例数据、预期输出或任何规范,我们只是猜测。我回答中的查询以更清晰的方式复制了原始查询的结果。
我需要从数据库中获取一些值并计算所有行数。
我写了这段代码:
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
status 和 type 是从 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 列表中使用任何子查询,除非有特定的原因需要添加一个。)
这个查询的结果集有点奇怪。但是除了原始查询之外,没有任何示例数据、预期输出或任何规范,我们只是猜测。我回答中的查询以更清晰的方式复制了原始查询的结果。