Я пытаюсь установить 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
Я хотел бы:
GROUP
поname
SORT
поfamily
,sub_family
и, наконец,name
COUNT
N umbers строк для каждого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
засчитываются Лимонный 2 раза, но я хотел бы, чтобы считать это только 1 раз, потому что один лимон находится в Фруктыsub_family
, а другой в Деревоsub_family
.
[UPDATE]: Вот мои желаемые результаты:
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
Как вы можете сортировать по столбцам, которые имеют несколько значений для ваших групп? Я думаю, вы в замешательстве. Измените свой запрос и укажите ваши * желаемые * результаты. –
Согласно вашему сообщению ** «Лимон» 2 раза, но я хотел бы, чтобы он считал его всего 1 ** в соответствии с вашим желаемым результатом ** Агро 7 Фрукты 4 Лимон 2 Дерево 4 Дерево 3 Лимон 2 ** так что твой реальная цель? – Alex
Мой вопрос, вероятно, недостаточно ясен. Как вы можете видеть, «Лимон» получает 2 раза за каждый лимон (один из «суффиксов» «Фрукты», а другой - в «Дереве» sub_family). Но я хотел бы считать это всего лишь 1 раз, так как два «Лимона» НЕ принадлежат к тому же sub_family. Один - это плод, а другой - дерево. – SuperKiwi