0

MySQLクエリを使用してレポートを書いています。私が報告する複数の列があります。その中には、多くの異なる値を含む 1 つの列があります (行の前に 1 つの値のみ)。その列には、カウントする必要がある特定の値が 2 つあります。最終結果は、タイプ別にグループ化されます。

テーブル

ID Name  has passed  Type  
 1  abc      yes (1)   z  
 2  xyz      yes (1)   x  
 3  cde      no  (0)   y  
 4  abc      yes (1)   z  
 5  cde      no  (0)   z  
 6  xyz      no  (0)   y  

私の期待される結果は次のとおりです。

For Type x  
 total records = 1  
 yes count = 1     
 total abc = 0  
 total cde = 0  

For Type y  
 total records = 2  
 yes count = 0     
 total abc = 0  
 total cde = 1  

For Type z  
 total records = 3  
 yes count = 2   
 total abc = 2  
 total cde = 1  

名前 xyz やその他の名前は数えないことに注意してください。

4

2 に答える 2

0
SELECT
    type,
    COUNT(*) AS total_records,
    COUNT(IF(has_passed, 1, NULL)) AS yes_count,
    COUNT(IF(name = 'abc', 1, NULL)) AS total_abc,
    COUNT(IF(name = 'cde', 1, NULL)) AS total_cde
FROM
    table
GROUP BY
    type
于 2012-06-15T21:42:19.933 に答える
0

頭のてっぺんから(現在、テスト用のデータベースにアクセスできません。申し訳ありません)...おそらく、このようなものが機能するでしょう(「合格」のために0と1を保存していると仮定します)?

SELECT
   type,
   SUM(passed) as "Yes count",
   SUM(case when name = 'abc' then 1 else 0 end) as "Total abc",
   SUM(case when name = 'cde' then 1 else 0 end) as "Total cde",
   COUNT(1) as "Total records"
FROM
   myTable
GROUP BY
   type
;
于 2012-06-15T21:44:06.020 に答える