2011-11-14 51 views
3

兩列我有以下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 

的規則是每個「項目名稱」將具有多個列表記錄,其中定義了費用和列表類型。可能有兩個「上市類型」[LISTED &已賣出]。

我想在表上運行一個查詢並生成類似上述輸出的摘要。

感謝 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