2016-04-26 5 views
0

私はテーブルUsersを持っています。私は次のクエリでそれからいくつかのデータをつかむためにアウトしようとしています:複数のSQLクエリをマージする方法

select name, lastname, gender, status, count(status = 'Trvl') as TrvlCount, 
     count(status != 'Trvl') as NotTrvlCount, count(id) as TotalCount 
from Users 
group by name, lastname, gender, dob; 

期待される結果が一意の名前、姓、性別、生年月日(重複を避けるため)と異なるステータスの合計で7列になります。しかし、私はなぜ3つのカウントの列が同じ値または同じ合計値を表示しているのかを修正できませんか?

アイデアはありますか?前もって感謝します。

+0

一般的なGROUP BYルールは次のとおりです。「GROUP BY句が指定されている場合、SELECTリストの各列参照は、グループ化列を特定するか、または集合関数の引数でなければなりません。私。私は '名前、姓、性別、ステータスでグループ化してみよう。 – jarlh

+0

でも同じ結果が得られます – vellattukudy

+0

COUNTは行数をカウントし、それらの条件に一致する行の数をカウントしようとしている場合はSUMを試します(TRUEは1、FALSEは0に等しいからです) – golimar

答えて

2

建設場合は、合計を使用する必要があります。

select name, lastname, gender, status, 
     sum(if(status = 'Trvl', 1, 0)) as TrvlCount, 
     sum(if(status != 'Trvl', 1, 0)) as NotTrvlCount, 
     count(id) as TotalCount 
from Users 
group by name, lastname, gender, dob; 
0
select name, lastname, gender, status, 
     (SELECT COUNT() FROM Users WHERE status = 'Trvl') as TrvlCount, 
     (SELECT COUNT() FROM Users WHERE status <> 'Trvl') as NotTrvlCount, 
     count(id) as TotalCount 
from Users 
group by name, lastname, gender, dob; 

はまた、あなたは、サブクエリでそれを行うことができます。

関連する問題