Я хочу иметь возможность подсчитать общий тип яблок (только органических) с каждого континента с разбивкой по странам;включая общее количество, если они смешаны.
Например, продукт питания B1 - это органические золотые яблоки из США.Таким образом, должно быть количество «1» golden_bag и «1» для органических.Теперь, A1 также является органическим из Аргентины - однако, у него есть и бабушка и красные восхитительные яблоки - таким образом это подсчитывается как "1" mixed_bag и "1" для granny_bag и "1" для red_bag также.
Наконец, E1 и F1 - оба яблоки Фуджи из Лаоса, но одно органическое, другое нет;таким образом, общее количество равно 2 fuji_bag, и оно должно иметь общее число 1 для Organic_fd.
Table X:
food_item | food_area | food_loc | food_exp
A1 lxgs argentina 1/1/20
B1 iyan usa 5/31/21
C1 lxgs peru 4/1/20
D1 wa8e norway 10/1/19
E1 894a laos 5/1/19
F1 894a laos 9/17/19
Table Y:
food_item | organic
A1 Y
B1 Y
C1 N
D1 N
E1 Y
F1 N
Table Z:
food_item | food_type
A1 189
A1 190
B1 191
C1 189
D1 192
E1 193
F1 193
SELECT continent, country,
SUM(organic) AS organic_fd, SUM(Granny) AS granny_bag,
SUM(Red_delc) AS red_bag, SUM(Golden) AS golden_bag,
SUM(Gala) AS gala_bag, SUM(Fuji) AS fuji_bag,
SUM(CASE WHEN Granny + Red_delc + Golden + Gala + Fuji > 1 THEN 1 ELSE 0 END) AS mixed_bag
FROM (SELECT (CASE SUBSTR (x.food_area, 4, 1)
WHEN 's' THEN 'SA' WHEN 'n' THEN 'NA'
WHEN 'e' THEN 'EU' WHEN 'a' THEN 'AS' ELSE NULL END) continent,
x.food_loc country, COUNT(y.organic) AS Organic
COUNT(CASE WHEN z.food_type = '189' THEN 1 END) AS Granny,
COUNT(CASE WHEN z.food_type = '190' THEN 1 END) AS Red_delc,
COUNT(CASE WHEN z.food_type = '191' THEN 1 END) AS Golden,
COUNT(CASE WHEN z.food_type = '192' THEN 1 END) AS Gala,
COUNT(CASE WHEN z.food_type = '193' THEN 1 END) AS Fuji
FROM x LEFT JOIN z ON x.food_item = z.food_item
LEFT JOIN y on x.food_item = y.food_item and y.organic = 'Y'
WHERE x.exp_date > sysdate
GROUP BY SUBSTR (x.food_area, 4, 1), x.food_loc, y.organic) h
GROUP BY h.continent, h.country, h.organic
Я не получаю правильный вывод, так как, например, Лаос покажет ДВАЖДЫ для учета органического количестваи неорганический подсчет.Таким образом, он покажет 1 organic_fd
и 0 organic_fd
и 1 fuji_bag
, а другая строка будет другой 1 fuji_bag
.Я хотел бы ПОЛНЫЙ счет.(Кроме того, если я добавлю больше продуктов, мой смешанный_баг будет отображать в основном число «1» для каждой записи / строк).
Ниже приведен желаемый результат:
| continent | country |organic_fd | granny_bag| red_bag| golden_bag| gala_bag|fuji_bag | mixed_bag
| SA | argentina | 1 | 1 | 1 | 0 | 0 | 0 | 1
| SA | peru | 0 | 1 | 0 | 0 | 0 | 0 | 0
| NA | usa | 1 | 0 | 0 | 1 | 0 | 0 | 0
| EU | norway | 0 | 0 | 0 | 0 | 1 | 0 | 0
| AS | laos | 1 | 0 | 0 | 0 | 0 | 2 | 0
Итак, скажем, я хочу добавить еще один продукт, G1 из Норвегии, и в нем есть 3 типа органических яблок: fuji, red, granny
...тогда Норвегия теперь будет иметь счет 1
для следующих столбцов: mixed_bag
, organic_fd
, fuji_bag
, red_bag
, granny_bag
(в дополнение к предыдущему счету 1 gala_bag
).Если вы добавите H1, который в точности совпадает с G1, то теперь он будет иметь общее число 2
для следующих элементов: mixed_bag
, organic_fd
, fuji_bag
, red_bag
, granny_bag