2015-10-04 46 views
1

假設我有一個包含「類型」,「顏色」和「尺寸」的服裝庫存表,並且我在這三個字段上做了一組以獲得每個字段的計數,但是然後想要獲取每個字段的百分比每種類型和顏色的大小。我用三個字段的原始計數(*)做了一個sql小提琴,並想知道是否可以返回每個類型和顏色的大小百分比。使用3上的計數在兩個字段上創建百分比

http://sqlfiddle.com/#!9/c7a4d/4

例如在SQL搗鼓出我得到黑色褲子如下:

  • 褲子,黑,大,5
  • 褲子,黑色,中,5
  • 褲子,黑色,小號,10

而我想要

  • 褲子,黑,大,5,25%
  • 褲子,黑色,中,5,25%
  • 褲子,黑,小,10,50%
+0

您可以提供樣品輸出? – sandeepsure

回答

1

你可以做聚集和聯接:

Select c.Type, c.Color, c.Size, 
     Count(*), Count(*)/cc.cnt as proportion 
from Clothing c join 
    (select c.type, c.color, count(*) as cnt 
     from clothing c 
     group by c.type, c.color 
    ) cc 
    on cc.type = c.type and cc.color = c.color 
group by c.Type, c.Color, c.Size, cc.cnt 
having Count(*) > 1 

COUNT(*)條件如何融入總量目前還不清楚,所以我離開它的子查詢。

+0

這似乎適用於實際的表,雖然它似乎不需要在最後一組的最後'cc.cnt'謝謝你的工作。不知道我是否可以在這裏發佈後續Q,但因爲它很小:我現在只想返回cc.cnt <1(類型/顏色具有多個大小)但cc.cnt <1的結果或比例<1作品。它返回空集。 –

+0

@MarkH。 。 。不需要'GROUP BY'中的'cc.cnt'是一個MySQL(mis)特性。至於你的其他問題,也許''應該是'''? –

0

你可以cross join與查詢從整個表中選擇count(*)您的查詢,並劃分數得到的百分比:

SELECT  Type, Color, Size, COUNT(*), COUNT(*)/total * 100 AS percentage 
FROM  Clothing 
CROSS JOIN (SELECT COUNT(*) AS total FROM Clothing) t 
GROUP BY Type, Color, Size