2017-02-03 9 views
0

特定の列の文字のインスタンス数で列を数えることはできますか?ネストされたサブクエリを持つCOUNT()

+---+---+ 
| i | p | 
+---+---+ 
| A | 3 | 
| B | 3 | 
| C | 0 | 
| A | 1 | 
| B | 1 | 
| C | 3 | 
| A | 1 | 
| B | 0 | 
| C | 0 | 
+---+---+ 

問合せ:

+---+----+----+-----+-----+-----+ 
| i | Sp | Cp | x3x | x1x | x0x | 
+---+----+----+-----+-----+-----+ 
| A | 5 | 3 | 1 | 2 | 0 | 
| B | 4 | 3 | 1 | 1 | 0 | 
| C | 4 | 3 | 1 | 0 | 2 | 
+---+----+----+-----+-----+-----+ 

は基本的に私は、列がグループ化された列に3、0または1のインスタンスをカウントする:

SELECT i, SUM(p) AS Sp, COUNT(p) AS Cp FROM table 
GROUP BY i 

Idはこれを取得したいですid 'i'で

私はこれだけでなく、多くのバリエーションを試しましたが、私はそれを行かないようです。 COUNT(P WHERE p='3')COUNT(P WHERE p='1')COUNT(P WHERE p='0')

私は私が私の研究では見逃していること)(COUNT以内にサブクエリを置くことができる手段はありますか?

私はまた、あなたが近くにあります

COUNT(Points='3')COUNT(='1')COUNT(Points='0')

答えて

2

を試してみました:

select i, sum(points), count(*), 
     sum(Points = 3), sum(points = 1), sum(Points = 0) 
from t 
group by i; 

この場合、一つの小さな違いは、値の周りの単一引用符を除去したことです。数値と比較するときは、一重引用符を使用しないでください。文字列と日付の定数には単一引用符を使用してください。

さらに重要な変更はcount()からsum()です。 count()は、非NULL値の数をカウントします。ブール式は真または偽ですが、実際にはNULLではありません(pointsNULLでない場合はデータに該当しません)。

MySQLはブール値を数値コンテキストで整数として扱います.0はfalse、1は真です。したがって、それらを追加すると、何かが真実である回数がカウントされます。

+0

これほど遠く離れているので、この作品は、ありがとうございます。私の論理はCOUNTでしたが、もし私が上記をアングライズしようとするならば、(点= 3)などの事実の数がSUMになるでしょうか? – denski

+0

ありがとうございます。私は質問のタイトルを変更する必要があると思う。 – denski

関連する問題