Професионална програма
Loading...
+ Нов въпрос
Bobosam avatar Bobosam 185 Точки

[DB-Fundamentals - Data Aggregation] - Problem 9.Age Groups

Нещо не мога да се преборя с джъджа. Виждам, че има хора, които са се справили. Явно аз бъркам нещо. Кода ми е следния: 

SELECT '[0-10]' AS age_group, COUNT(wd.id) AS wizard_count
FROM wizzard_deposits wd
WHERE wd.age BETWEEN 0 AND 10
UNION ALL
SELECT '[11-20]' AS age_group, COUNT(wd.id) AS wizard_count
FROM wizzard_deposits wd
WHERE wd.Age BETWEEN 11 AND 20
UNION ALL
...........................................................
SELECT'[61+]' AS age_group, COUNT(wd.id) AS wizard_count
FROM wizzard_deposits wd
WHERE wd.Age > 60

 

Тагове:
0
Databases Basics - MySQL
vancho avatar vancho 430 Точки
Best Answer

Аз не мисля, че логиката ти не е много вярна. Виж аз как съм го направил (помъчих се малко, но излезна), ако ти е от полза.

 

SELECT

CASE 
    WHEN age >= 0 AND age < 11 THEN '[0-10]'
    WHEN age >= 11 AND age < 21 THEN '[11-20]'
    WHEN age >= 21 AND age < 31 THEN '[21-30]'
    WHEN age >= 31 AND age < 41 THEN '[31-40]'
    WHEN age >= 41 AND age < 51 THEN '[41-50]'
    WHEN age >= 51 AND age < 61 THEN '[51-60]'
    WHEN age >= 61 THEN '[61+]'

END AS age_group, COUNT(age) AS wizard_count FROM wizzard_deposits

GROUP BY age_group

0
03/10/2016 16:20:22
Bobosam avatar Bobosam 185 Точки

Сега видях къде е разликата, При теб не излиза групата  [0-10] .Понеже няма такива въобще не влиза в този кейс и не се отпечатва, а при мен излиза с каунт нула. Явно условието не е коректно.

Благодаря.

0
GallinaSt avatar GallinaSt 2 Точки

Как групираш по age_group, когато SELECT-клаузата се изпълнява логически след GROUP BY- клаузата и реално тази променлива в  GROUP BY не е видима?

 

0
dead4y avatar dead4y 62 Точки

Обедини ги в една заявка като използваш CASE ... WHEN ...

1
Bobosam avatar Bobosam 185 Точки

Не мисля, че това е проблема. Заявката си работи в Heidi но в джъджа не минава. Ще опитам и така. Благодаря.

0
RFilipov avatar RFilipov 136 Точки

MS SQL 100/100 по твоя начин:

SELECT TOTALRESULT.AgeGroup, 
	   TOTALRESULT.WizardCount FROM
	   (SELECT '[0-10]' AS [AgeGroup], COUNT(wd.id) AS [WizardCount]
	   FROM WizzardDeposits wd
	   WHERE wd.age BETWEEN 0 AND 10
	   -------------------------------
	   UNION ALL
	   SELECT '[51-60]' AS [AgeGroup], COUNT(wd.id) AS [WizardCount]
	   FROM WizzardDeposits wd
	   WHERE wd.Age BETWEEN 51 AND 60
	   UNION ALL
	   SELECT'[61+]' AS [AgeGroup], COUNT(wd.id) AS [WizardCount]
	   FROM WizzardDeposits wd
	   WHERE wd.Age > 60) AS TOTALRESULT
	   WHERE TOTALRESULT.WizardCount <> 0

 

1
03/10/2016 18:47:27