2011-11-14 9 views
3

に2つの以上の列私は、MySQLのテーブルを次ていますカウント一意の行のmysql

Item Name Listing Fee Listing Type 
watch  $0.20  LISTED 
watch  $0.20  LISTED 
watch  $0.30  SOLD 
glasses  $0.50  LISTED 
glasses  $0.50  LISTED 
glasses  $0.50  LISTED 
glasses  $1.00  SOLD 

私が必要とどのようなSQLによってグループによる出力を下回っている:

Item Name Total Fee Total Listed Total Sold 
watch  $0.70  2  1 
glasses  $2.50  3  1 

ルールは、それぞれの「アイテム名」が、料金とリスティングタイプが定義されている複数のリスティングレコードを有することである。 2つの「リスティングタイプ」[LISTED & SOLD]があります。

私はテーブルのクエリを実行し、上記の出力のような要約を生成したいと思います。

おかげ まずwikki

答えて

2
SELECT 
    `Item Name`, 
    SUM(`Listing Fee`) AS `Total Fee`, 
    SUM(CASE `Listing Type` WHEN 'LISTED' THEN 1 ELSE 0 END) AS `Total Listed`, 
    SUM(CASE `Listing Type` WHEN 'SOLD' THEN 1 ELSE 0 END) AS `Total Sold` 
FROM `Table Name` 
GROUP BY `Item Name` 

これは、静的を使用してリストをまとめるだろう」 - あなたはグループ項目によってこれらのレコードは、その後、あなたは小さなトリックを使用することができます合計をカウントする必要がありますリストタイプ」を参照してください。動的リストが必要な場合は、ストアドプロシージャでSQLを構築して実行する必要があります。

出力:

Item Name Total Fee Total Listed Total Sold 
watch  $0.70  2    1 
glasses  $2.50  3    1 

あなたはさらに、このステップを取ることができる:

SELECT 
    `Item Name`, 
    SUM(
     CASE `Listing Type` 
      WHEN 'LISTED' THEN `Listing Fee` 
      ELSE 0 
     END 
    ) AS `Total Fee Listing`, 
    SUM(
     CASE `Listing Type` 
      WHEN 'SOLD' THEN `Listing Fee` 
      ELSE 0 
     END 
    ) AS `Total Fee Sold` 
FROM `Table Name` 
GROUP BY `Item Name` 

出力:

Item Name Total Fee Listing Total Fee Sold 
watch  $0.40    $0.30 
glasses  $1.50    $1.00 
+0

ありがとう@MizardX、それは私が欲しかったように働いた!いいぞ! – Wikki

2

-

SELECT 
    `Item Name`, 
    SUM(`Listing Fee`) `Total Fee`, 
    COUNT(IF(`Listing Type` = 'LISTED', 1, NULL)) `Total Listed`, 
    COUNT(IF(`Listing Type` = 'SOLD', 1, NULL)) `Total Sold` 
FROM 
    mytable 
GROUP BY 
    `Item Name`; 
+0

おかげ@Devart!このトリックはgr8を働いた!乾杯! – Wikki

関連する問題