3

I have table here.

enter image description here

How can i

SELECT 
    sum(gload1) as 'g1',
    sum(gload2) as 'g2'.
    sum(gload3) as 'g3',
    sum(gload4) as 'g4' 
FROM member 
WHERE age = 15-20,21-25,26-30 
GROUP BY gender;

result like this : Just sample

enter image description here

How can i query like this. Thank for advamce.

4

3 回答 3

2
SELECT 
  CASE 
    WHEN `age`>=15 AND `age`<=20 THEN '15-20'
    WHEN `age`>=21 AND `age`<=25 THEN '21-25'
    WHEN `age`>=26 AND `age`<=30 THEN '26-30'
  END AS `AgeRange`,
  SUM(`gload1`) AS `g1`, 
  SUM(`gload2`) AS `g2`, 
  SUM(`gload3`) AS `g3`, 
  SUM(`gload4`) AS `g4`
FROM 
  member 
GROUP BY `AgeRange`

请参阅 SQL 小提琴

于 2013-09-27T21:45:20.580 回答
1

试试这样:

SELECT
    CASE 
        WHEN age BETWEEN 15 AND 20 THEN '15-20'
        WHEN age BETWEEN 20 AND 30 THEN '20-30'
        ELSE '30-...'
    END as age_group,
    gender,
    sum(gload1) as gload1_total
FROM 
    member
GROUP BY 
    CASE 
        WHEN age BETWEEN 15 AND 20 THEN '15-20'
        WHEN age BETWEEN 20 AND 30 THEN '20-30'
        ELSE '30-...'
    END,
    gender

如果它不起作用,您可能必须执行子查询:内部查询将范围字符串添加到每一行,外部查询将按它分组。

于 2013-09-27T21:48:20.777 回答
1

您需要创建代表行的假表。尝试这个:

SELECT AgeBrackets.Age as Age, sum(gload1) as gload1, sum(gload2) as gload2, sum(gload4) AS gload
FROM 
(SELECT '15-20' AS Age, 15 as stdt, 20 as eddt
UNION
SELECT '21-25', 21, 25
UNION
SELECT '26-30', 26, 30) AS AgeBrackets
JOIN member
ON member.age BETWEEN AgeBrackets.stdt AND AgeBrackets.eddt
GROUP BY Age
ORDER BY Age;
于 2013-09-27T21:44:59.603 回答