2017-01-26 11 views
1

私のテーブルのようになります。SELECT COUNT

id type value 
1 type1 Good 
2 type1 Bad 
3 type1 Match 
4 type2 Good 
5 type2 Bad 
6 type2 Match 
7 type3 Good 
8 type3 Bad 
9 type3 Match 

各「タイプ」は3つの可能な値のオプションが

現在、私はデータ

$result = mysql_query("SELECT type, value, COUNT(*) FROM data GROUP BY type,value ORDER BY COUNT(*) DESC"); 
echo "<table border='1'>"; 
while($row = mysql_fetch_array($result)) { 
echo "<tr>"; 
echo '<td><FONT SIZE=3 COLOR=BLACK> ' . $row['type'] . ' </FONT></td>'; 
echo '<td><FONT SIZE=3 COLOR=BLACK> ' . $row['value'] . ' </FONT></td>'; 
echo '<td><FONT SIZE=4 COLOR=GREEN> ' .$row['COUNT(*)'] . '</FONT></td>';} 
echo "<tr>"; 
echo "</table>"; 

をプレビューするために、このコードを使用しています、3列3列に表示されたテーブルの結果(3 * 3 * 3)

テーブルに表示しようとしていますこのような4列のみ3行 で:

type COUNT "Good" COUNT "Bad" COUNT "Match" 
type1  1    1    1 
type2  1    1    1 
type3  1    1    1 

と私はそれを行う方法がわからないです。

どうすればいいですか?その後、型に基づいて

SELECT type, 
     SUM(CASE WHEN type='Good' THEN 1 ELSE 0 END) AS good, 
     SUM(CASE WHEN type='Bad' THEN 1 ELSE 0 END) AS bad, 
     SUM(CASE WHEN type='Match' THEN 1 ELSE 0 END) AS match 
    FROM data 
    GROUP BY type 

この意志グループのすべての値がどのくらいあるか、各値のうち見つけることSUMを使用します。

あなたは(AB)は CASESUMの組み合わせを使用することができます

答えて

1

はこれを行うには。 CASEを使用することによって、各行のゼロまたは1を合計するので、「カウント」の1つのみが加算されます。

+0

あなたのおかげでありがとう はい、その作業は私のように必要です – AllCapone1912

0

あなたは条件付き集約使用することができます。これは、それが何をするかの、より理解しやすいので、ジャストcountを使用して選択肢を与えること

SELECT type, 
     SUM(value='Good') AS Good, 
     SUM(value='Bad') AS Bad, 
     SUM(value='Match') AS Match, 
FROM mytable 
GROUP BY type 
+0

完璧 正確なもの – AllCapone1912

0

を。 w3schools docから

、我々はcount

COUNT(column_nameに)関数は、値の数を(NULL値がカウントされません)

返すnull値を取らないことがわかります

したがって、else値を削除すると、case文に一致する行だけがカウントされます。これは上で動作していない人が出て見つけた場合、

これはMySQL count()

SELECT type, 
     COUNT(CASE WHEN type='Good' THEN 1 END) AS good, 
     COUNT(CASE WHEN type='Bad' THEN 1 END) AS bad, 
     COUNT(CASE WHEN type='Match' THEN 1 END) AS match 
    FROM data 
    GROUP BY type 

Sybaseの中に、次の作品にコメントで確認される(null以外の値が1の代わりに使用することができます) mysql、私はテストする準備ができているので、私に通知してください。