Mysql 使用计数3在两个字段上创建百分比

Mysql 使用计数3在两个字段上创建百分比,mysql,count,Mysql,Count,假设我有一个包含类型、颜色、尺寸的服装库存表,我对这三个字段进行分组,以获得每种类型和颜色的每种尺寸的百分比。我用sql修改了三个字段的原始计数(*),不知道是否可以返回每个类型和颜色的大小百分比 例如,在所示的sql fiddle中,我得到了以下关于黑色裤子的信息: 裤子,黑色,大号,5码 裤子,黑色,中号,5码 裤子,黑色,小号,10码 而我想要的 裤子,黑色,大号,5.25% 黑色中号裤子,5.25% 黑色小裤,10,50% 您可以进行聚合和加入: Select c.Type, c

假设我有一个包含类型、颜色、尺寸的服装库存表,我对这三个字段进行分组,以获得每种类型和颜色的每种尺寸的百分比。我用sql修改了三个字段的原始计数(*),不知道是否可以返回每个类型和颜色的大小百分比

例如,在所示的sql fiddle中,我得到了以下关于黑色裤子的信息:

  • 裤子,黑色,大号,5码
  • 裤子,黑色,中号,5码
  • 裤子,黑色,小号,10码
而我想要的

  • 裤子,黑色,大号,5.25%
  • 黑色中号裤子,5.25%
  • 黑色小裤,10,50%

您可以进行聚合和加入:

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(*)
条件如何适应总数,因此我将其从子查询中排除。

您可以通过从整个表中选择
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

您能提供您的示例输出吗?这在应用于实际表时似乎效果很好,尽管它似乎不需要最后一组中的最后一个“cc.cnt”,谢谢。不确定我是否可以在这里发布后续Q,但因为它是次要的:我现在只想返回那些cc.cnt为@MarkH的结果。
groupby
中不需要的
cc.cnt
是MySQL(mis)功能。至于你的另一个问题,也许
应该是code>?