2016-12-06 9 views
0

에 따라 나는 field1이있는 테이블 table1 1에서 나는 레코드의 수를 얻을 필요가 5 값이있을 때 field1 = 1하고 나머지 레코드 field1 <> 1의 수입니다. 그래서 나는 이런 식으로 그것을 할 수 :이 카운트 필드 값

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

그러나이 나에게 결과에 두 개의 기록과 같은 두 개의 정확한 값을 제공하지만 궁금 하나를 선택 SQL의 열로서이 개 카운트 값을 얻을 수있는 방법이 있나요?

+0

아리오 크의 대답은 어떻게 정확합니까? 그것에는 1의 수를 갖는 하나의 열이 있습니다. 여러분의 질문은 1의 수와 2의 열에 1이 아닌 수를 요구합니다. 한 줄로 된 답이 아닌 답을 계산하지 않은 방법이 귀하의 질문에 어떻게 대처하는지 잘 모르겠습니다. – billpennock

+0

그의 대답은 하나의 SQL에서'case'를 사용하여 두 개의 열을 가지고 있습니다 – Wel

+0

오 geesshh ... 처음에 이것을 보았을 때 스크롤 막대가 나타나지 않았고 UI가 처음으로갔습니다. 첫 번째 쿼리의 데이터 3이고 "참"인 행입니다. 나는 그것이 두 번째 행을 가져야한다고 생각하면서 스크롤 부족에 대한 더 많은 자극이 있었음에 틀림 없다는 것을 알아야했다. 그래서, 얼굴에 계란, 당신은 그의 대답을 더 좋아했습니다. 시원한. – billpennock

답변

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

중간 테이블을 만들지 않으려면 하위 쿼리 솔루션도 있어야합니다. 이 사람은 당신이 찾고있는 무엇을 수행해야합니다

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

내 대답은 바로이 페이지를 참조하십시오. 병렬로 두 개의 카운터를 실행해야합니다. –