2009-05-27 10 views
3

SQLでは「回答」という列があり、その値は1または2のいずれかになります。毎月1と2の数を数えるSQLクエリを生成する必要があります。私は、次のクエリを持っていますが、それは動作しません:SQL;各列に指定された値のみをカウントする

SELECT MONTH(`date`), YEAR(`date`),COUNT(`answer`=1) as yes, 
COUNT(`answer`=2) as nope,` COUNT(*) as total 

FROM results 

GROUP BY YEAR(`date`), MONTH(`date`) 

答えて

5

がSUM-CASEのトリックを試してみてください。

SELECT 
    MONTH(`date`), 
    YEAR(`date`), 
    SUM(case when `answer` = 1 then 1 else 0 end) as yes, 
    SUM(case when `answer` = 2 then 1 else 0 end) as nope, 
    COUNT(*) as total 
FROM results 
GROUP BY YEAR(`date`), MONTH(`date`) 
+0

Aこれを変えるには、countを使います( 'answer' = 1のときは別のケース、 '' answer '' nse end)。これは、同じ行を複数回表示させ、answer(master(1)を使用して同じマスター行に対して数回追加する)で別個の値を持つ結合を持つ場合に、より便利です。この場合有用ではありませんが、言及する価値があります:) –

6

Iだろう、年、月、および加えて、答えそのものでグループ。これは、月ごとに2つのラインになります。(それは、追加の回答値のためにも一般的なのです)答え1のために出演をカウント1、および解答2のための別の

SELECT MONTH(`date`), YEAR(`date`), answer, COUNT(*) 
FROM results 
GROUP BY YEAR(`date`), MONTH(`date`), answer 
+0

私と同じアイデアです。私もそれが速いと確信しています。 –

+0

これは、合計カウントを返しませんが、良いアイデアです。 – Andomar

+0

@Andomar:質問から - 「毎月1つと2つの量をカウントするSQLクエリを生成する必要があります。彼は合計を数えることに関して何も言及しなかった(それは彼の質問に現れているが、私は単にそれが「簡単だから」と思う)。合計を数えることは大きな課題ではありません。単にGROUP BYとSELECTから "答え"を削除するだけです。 –

0
SELECT year, 
     month, 
     answer 
     COUNT(answer) AS quantity 
FROM results 
GROUP BY year, month, quantity 
 
year|month|answer|quantity 
2001| 1|  1|  2 
2001| 1|  2|  1 
2004| 1|  1|  2 
2004| 1|  2|  2 
SELECT * FROM results; 
 
year|month|answer 
2001| 1|  1 
2001| 1|  1 
2001| 1|  2 
2004| 1|  1 
2004| 1|  1 
2004| 1|  2 
2004| 1|  2 
関連する問題