【发布时间】:2015-06-23 05:06:54
【问题描述】:
我正在尝试在名为“commodities”的表之一的单个查询中使用 GROUP、SORT 和 COUNT。
这是我的MySql 表的简化:
family sub_family name detailed_name
Agro Grains Wheat Wheat per 1 mt
Agro Grains Corn Corn per 1 mt
Agro Grains Sugar Sugar per 1 mt
Agro Fruits Apple Apple red
Agro Fruits Apple Apple green
Agro Fruits Apple Apple yellow
Agro Fruits Lemon Lemon classic
Wood Tree Lemon Lemon in logs
Wood Tree Oak Oak in logs
Wood Tree Epicea Epicea in logs
Wood Packaging Kraftliner Krafliner 3mm
我想:
-
GROUPname -
SORTfamily,sub_family,最后是name -
COUNT每个family、sub_family和name的行数(相同的sub_family)
到目前为止,除了COUNT 之外,我设法在同一个sub_family 中做所有事情。
确实,如下查询:
SELECT
TableC.family,
TableC.NbrFamily,
TableB.sub_family,
TableB.NbrSubFamily,
TableA.name,
TableA.NbrName
FROM
(
SELECT
family,
sub_family,
name,
COUNT(DISTINCT commodities.id) AS NbrName
FROM commodities GROUP BY name
) TableA
INNER JOIN
(
SELECT
sub_family,
COUNT(DISTINCT commodities.id) AS NbrSubFamily
FROM commodities GROUP BY sub_family
) TableB
ON (TableA.sub_family = TableB.sub_family)
INNER JOIN
(
SELECT
family,
COUNT(DISTINCT commodities.id) AS NbrFamily
FROM commodities GROUP BY family
) TableC
ON (TableA.family = TableC.family)
GROUP BY TableA.name
ORDER BY TableA.family,TableA.sub_family,TableA.name
结果如下:
family NbrFamily sub_family NbrSubFamily name NbrName
Agro 7 Grains 3 Wheat 1
Agro 7 Grains 3 Corn 1
Agro 7 Grains 3 Sugar 1
Agro 7 Fruits 4 Apple 3
Agro 7 Fruits 4 Lemon 2
Wood 4 Tree 3 Lemon 2
Wood 4 Tree 3 Oak 1
Wood 4 Tree 3 Epicea 1
Wood 4 Packaging 1 Kraftliner 1
您可以看到 NbrName 计数了 Lemon 2 次,但我希望它只计数 1 次,因为 Fruits 中有一个 lemon em> sub_family 和另一个在 Tree sub_family.
[更新]:这是我想要的结果:
family NbrFamily sub_family NbrSubFamily name NbrName
Agro 7 Grains 3 Wheat 1
Agro 7 Grains 3 Corn 1
Agro 7 Grains 3 Sugar 1
Agro 7 Fruits 4 Apple 3
Agro 7 Fruits 4 Lemon 1
Wood 4 Tree 3 Lemon 1
Wood 4 Tree 3 Oak 1
Wood 4 Tree 3 Epicea 1
Wood 4 Packaging 1 Kraftliner 1
【问题讨论】:
-
如何按对您的组有多个值的列进行排序?我觉得你很困惑。编辑您的查询并包含您的期望结果。
-
根据你的帖子 'Lemon' 2 次,但我希望它只计算 1 根据你想要的结果 Agro 7 Fruits 4 Lemon 2 Wood 4树 3 柠檬 2 那么你的真正目标是什么?
-
我的问题可能还不够清楚。如您所见,“Lemon”对每个 Lemon 计数 2 次(一个在 'Fruits' sub_family 中,另一个在 'Tree' sub_family 中)。但我只想算一次,因为这两个“柠檬”不属于同一个 sub_family。一个是水果,另一个是树。
-
提供的数据样本中没有
core和id列,但您在查询中引用了它们 -
您提供的查询结果与此处提供的查询不匹配是证明sqlfiddle.com/#!9/e9206/3 所以您的查询返回 1 行,柠檬不是 2
标签: mysql sql sorting count group-by