[英]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.