2

次の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で実行できますか?

4

3 に答える 3

3

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
于 2012-08-19T20:54:11.797 に答える
2
select count(name) name_count,
       count(coalesce(nullif(l1,''), nullif(l2,''))) l1_or_l2_count,
       count(sch) sch_count
  from your_table;
于 2012-08-19T20:56:34.033 に答える
0

はい:

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
于 2012-08-19T20:54:01.057 に答える