繁体   English   中英

简化复杂的计数SQL语句

[英]Simplify a complicated count SQL statement

我想知道是否有一种方法可以简化以下SQL语句。 这是我的桌子。

| SID | name | l1 | l2 | sch |
|  1  | john |    |    | sch |
|  2  | mary | l1 |    |     |
|  3  | zack | l1 | l2 |     |
|  4  | paul | l1 | l2 | sch |

l1或l2被填充,或者两者都可以被填充

并非每个“ sch”都有其价值

我要做的是计算每日汇总表,但是我是通过PHP来完成的,我想知道是否可以仅使用SQL来完成。 因此,例如

- Total count (This is just count(name))
- Count(sch)
- If !empty (l1) OR !empty (l2) THEN l + 1

所以现在,基于以上

 Total count = 4
 count(sch) = 2
 count(l1 || l2) = 3

可以用SQL完成吗?

您没有说l1,l2和sch列是否可以包含NULL。

如果这些列不能包含NULL,则mysql查询将类似于:

SELECT COUNT(*) AS `count`, SUM(sch<>'') AS count_sch,
SUM(l1<>'' OR l2<>'') AS count_l
FROM your_table

如果这些列可以包含NULL,则mysql查询将类似于:

SELECT COUNT(*) AS `count`, SUM(sch IS NOT NULL) AS count_sch,
SUM(l1 IS NOT NULL OR l2 IS NOT NULL) AS count_l
FROM your_table
select count(name) name_count,
       count(coalesce(nullif(l1,''), nullif(l2,''))) l1_or_l2_count,
       count(sch) sch_count
  from your_table;

是:

select count(*) as count, count(sch) as school,
       sum(case when l1 is not null or l2 is not null then 1 else 0 end)
from table

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM