2016-12-06 12 views
0

に基づいて、私はfield1を持つテーブルtable1は、1から、私はレコードの数を取得する必要があります5までの値を持っている持っているときfield1 = 1と残りのレコードfield1 <> 1のカウント。私はこのようにそれを行うことができます:2つのカウントは、フィールド値

select count(*) from table1 
group by field1 = 1 

しかし、これは私の結果に2つのレコードとして2つの正しい値が得られますが、私は疑問に思う1つの選択SQLの列などの2つのカウント値を取得する方法はありますか?

+0

アリオックの答えは正しいですか?それは1のカウントを持つ1つの列を持っています、あなたの質問は1の数を求め、2の列に1以外の数を求めました。私は1つの行に結果が出て、それ以外のものを数えない答えがあなたの質問にどのように対処しているかは分かりません。 – billpennock

+0

彼の答えは1つのSQLで 'case'を使用して2つの列を持っています – Wel

+0

ああgeesshh ...私はこれを最初に見たときにスクロールバーが表示されず、私のUIは最初に行った最初のクエリの行はデータ3であり、「真」であった。私は、2番目の行を持っていなければならないと考えると、スクロールの不足の霊感が増してきたに違いないと認識していたはずです。だから、卵が顔に、あなたは彼の答えがよかったです。クール。 – billpennock

答えて

1

実際にはサブ選択は必要ありません。 1つのクエリを使用すれば十分です。

ヒント:SQL標準集約関数はすべてのNULL値を無視します。

c:\Program Files\Firebird\Firebird_3_0>isql 
Use CONNECT or CREATE DATABASE to specify a database 
SQL> create database "b:\testfb3.fdb" ; 

SQL> create table oneTwoFive (field1 int); 

SQL> set bulk_insert insert into onetwofive(field1) values (?); 
BULK> (1) 
BULK> (2) 
BULK> (3) 
BULK> (4) 
BULK> (5) 
BULK> (1) 
BULK> (1) 
BULK> (2) 
BULK> 

SQL> select * from onetwofive; 

     FIELD1 
============ 
      1 
      2 
      3 
      4 
      5 
      1 
      1 
      2 

SQL> select distinct count(*), field1=1 as "Is One Flag" from onetwofive 
CON> group by 2; 

       COUNT Is One Flag 
===================== =========== 
        3 <true> 
        5 <false> 

SQL> select 
CON> count(case when field1=1 then 1 else null end) "When One", 
CON> count(case when field1=1 then null else 1 end) "Rest" 
CON> from oneTwoFive; 

      When One     Rest 
===================== ===================== 
        3      5 
2
create table onetwofive (field1 int) 
go 
insert into onetwofive (field1) values 
    (1),(2),(3),(4),(5),(1),(1),(2) 
go 
select (select count(*) from onetwofive where field1 = 1) ones, 
     (select count(*) from onetwofive where field1 <> 1) others 
     from rdb$database 
+0

サブ選択の必要はありません: - P –

1

中間テーブルを作成しない場合は、サブクエリソリューションもあります。この1は、あなたが探しているものを行う必要があります。

select distinct * from 
(select count(*) as ones from table1 group by field1 having field1 = 1) as ones 
join 
(select count(*) as not_ones from table1 group by field1 having field1 <> 1) as not_ones; 

あなたは以下のようなものを取得する必要があります。このことができます

+------+----------+ 
| ones | not_ones | 
+------+----------+ 
| 9 |  6 | 
+------+----------+ 
1 row in set (0,00 sec) 

希望を。

+0

サブ選択の必要はありません: - P –

+0

本当に?あなたは単純にレコードの総数からカウントを抽出することができますか?しかし、これをどのように単一のクエリで行うのですか? –

+0

私の答えでこのページをご覧ください。 2つのカウンターを並行して実行する必要があります –

関連する問題