3

次のような副選択に頼らずに、テーブル内の行数と特定の条件が真の行数をカウントする方法:

create table t (a integer);
insert into t (a) values (1), (2), (null);

select
    (select count(*) from t) as total_lines,
    (select count(*) from t where a = 1) as condition_true
;
 total_lines | condition_true 
-------------+----------------
           3 |              1
4

3 に答える 3

6
select count(*) as total_lines, count(a = 1 or null) as condition_true
from t
;
 total_lines | condition_true 
-------------+----------------
           3 |              1

次の理由で機能します。

まずcount(*)、何も関係なくすべての行をカウントしますcount(my_column)が、my_column が null でない行のみをカウントします。

select count(a) as total
from t
;
 total 
-------
     2

Second(false or null)が返さnullれるので、条件が満たされないときはいつでも戻りnull、null 以外をカウントするだけでカウントされcount(condition or null)ません。

于 2012-06-30T11:37:12.217 に答える
3

使用してくださいSUM(condition)

select
    count(*) as total_lines,
    sum(a = 1) as condition_true
from t

ここで動作することを確認してください。

これが機能するのは、mysql ではtrueis1およびfalseis0であるため、条件の がtrue の場合と false の場合にsum()追加されます。これにより、条件が true である回数が効果的にカウントされます。10

多くの人は、ステートメントが必要だと誤って信じていますが、casemysql ではそうではありません (他のデータベースでは必要です)。

于 2012-06-30T12:38:12.987 に答える
2

これは、カウント内の条件を使用して簡単に実行できます。それが最適化された方法であるかどうかはわかりませんが、作業は完了します

あなたは次のようにそれを行うことができます

select count(*) as total_lines, COUNT(CASE WHEN a = 1 THEN 1 END) as condition_true from t

ここで確認できます

sqlFiddle

于 2012-06-30T12:47:15.900 に答える