2017-12-07 2 views
1

のは、私はそれが最初の列と2列目の全従業員に社員= 1のために顧客の数を見せて、このクエリSqliteをクエリ - 最初の列からの和と列

select 
    count(customerid) as Count_Own, 
    (select count(customerid) from Customers) Count_ALL 
from 
    Customers 
where 
    EmployeeID = 1 

を持っているとしましょう。

今、私が代わりにテーブルCustomersのことで同様のクエリを書きたい、私は大きなサブクエリを持っている:私は私のサブクエリを使用せずに、このクイックをカウントしたかったので

select 
    count(customerid) as Count_Own, 
    (select count(customerid) from /*BIG QUERY*/) Count_ALL 
from 
    (/*BIG QUERY*/ ) 
where 
    EmployeeID = 1 

私は、列Count_ALLで今問題を抱えています。私はそれが単にそれのための解決かどうか疑問に思います。

答えて

1

回避策:編集

select 
    count(T1.customerid) as Count_Own, T2.Count_ALL 
From (Select 1 as joinField, --BIG QUERY-- ) T1 
join (select count(customerid) Count_ALL, 1 as joinField 
     from customers) T2 
on T1.joinField = T2.joinField 
where T1.EmployeeID = 1 

によるOPのコメント:両方のクエリに参加する偽の列を作成します。

CTEを使用すると、大きなクエリを2回書くのを避けることができます。のは、この単純化されたスキーマで作業してみましょう:

[email protected]:~/tmp$ sqlite3 pepe.sql 
SQLite version 3.11.0 2016-02-15 17:29:24 
Enter ".help" for usage hints. 
sqlite> create table t (i int , e int); 
sqlite> insert into t values 
    ...> (1,1), 
    ...> (2,1), 
    ...> (3,1), 
    ...> (1,2); 

はその後、クエリは次のようになります。

sqlite> with big_query as 
    ...> (select i,e from t) 
    ...> select count(i), (select count(*) from big_query) 
    ...> from big_query 
    ...> where e=1; 
3|4 

また、あなたがsubrogateサブクエリを避けるために旅に参加偽物を使用することができます。

sqlite> with big_query as 
    ...> (select i,e from t), 
    ...> q1 as 
    ...> (select count(*) as n, 1 as fake from big_query), 
    ...> q2 as 
    ...> (select count(*) as n, 1 as fake from big_query where e=1) 
    ...> select q2.n, q1.n 
    ...> from q1 inner join q2 
    ...> on q1.fake=q2.fake; 
3|4 

そして最後のアプローチcaseを使用することです:

sqlite> select count(case when e = 1 then 1 else null end) , count(*) 
    ...> from t 
    ...> ; 
3|4 
+0

ありがとう。それは '偽の'結合で興味深い解決策ですが、多分私は正確に記述していませんでした。私は少し例を修正した。要点は、両方の列を数えるためにサブクエリを使用する必要があることです。 – user3688227

+0

大丈夫、私は私の答えを詳述する。 – danihp

+0

ありがとう! 、素晴らしい解決策 – user3688227

関連する問題