0

テーブルの列にクエリを書き込もうとしています。列「テキスト」には、5 または 10 または null のいずれかの値を指定できます。5 または 10 または null のテーブルの行数を取得したい。次のクエリを書きましたが、正しく機能していません

select COUNT(*) from t_test
select COUNT(text) from t_test where text=5
select COUNT(text) from t_test where text=10
select COUNT(text) from t_test where text=null 

最初の 3 つの select ステートメントの値を取得できますが、null を含む行が含まれている間、null を含む最後のステートメントはゼロを返します。このクエリの書き方 ありがとう

4

2 に答える 2

3

条件付き合計を使用する必要があります。

select count(*),
       sum(case when text = '5' then 1 else 0 end) as Num_5,
       sum(case when text = '10' then 1 else 0 end) as Num_10,
       sum(case when text is null then 1 else 0 end) as Num_Null
from t_test;

これは、呼び出されたフィールドtextが文字列として格納されることを前提としているため、定数は引用符で囲みます。もしそれが本当に数字なら、なぜそれが と呼ばれているのかがまず気になりますtext。その場合、一重引用符を省略できます。

count(text)あなたの場合、 null以外の値をカウントするため、最後のものは機能しません。ただし、where句はNULL値のみを保持します。そのためには、を使用する必要がありますcount(*)。正しいクエリは次のようになります。

select count(*) from t_test where text is null;
于 2013-07-08T01:14:29.477 に答える
2

その最後のクエリに必要なものは次のとおりです。

select COUNT(*) from t_test where text is null

知らせ:

  • COUNT(*)どちらCOUNT(TEXT)がnullではなく、値をレンダリングしない
  • is nullそれよりも=null

したがって、クエリの最終的なセットは次のとおりです。

select COUNT(*) from t_test
select COUNT(text) from t_test where text=5
select COUNT(text) from t_test where text=10
select COUNT(*) from t_test where text is null
于 2013-07-08T01:15:54.093 に答える