Сумма смежного столбца в условном диапазоне - PullRequest
0 голосов
/ 09 ноября 2019

У меня есть скрипт, который пытается сопоставить некоторые данные переписи.

SELECT tbl.State, tbl.ranges, tbl.race, tbl.origin, tbl.sex
  FROM (select case  
    when age between 18 and 23 then '18-23'
    when age between 24 and 35 then '24-35'
    else '36-85' end as ranges, 
    [State]
      ,race,
      sex,
      origin

  from [StateSexOriginRaceAge]
    group by State, age, pop, race, sex, origin
    having sex > 0
  ) as tbl

group by tbl.State, tbl.ranges, tbl.race, tbl.sex, tbl.origin
order by state, ranges, race, origin, sex

Вывод выглядит примерно так, как я хочу, за исключением того, что есть столбец населения, и я хочу суммировать столбец населениядля каждой возрастной группы. Есть мысли?

Я пытался

SELECT tbl.State, tbl.ranges, tbl.race, tbl.origin, tbl.sex, tbl.pop
  FROM (select case  
    when age between 18 and 23 then '18-23'
    when age between 24 and 35 then '24-35'
    else '36-85' end as ranges, 
    [State]
      ,race,
      sex,
      origin,
      sum(pop) as pop

  from [StateSexOriginRaceAge]
    group by State, age, pop, race, sex, origin, pop
    having sex > 0
  ) as tbl

group by tbl.State, tbl.ranges, tbl.race, tbl.sex, tbl.origin, tbl.pop
order by state, ranges, race, origin, sex

Но я получаю тонну лишних строк, примерно в 20 раз больше, поэтому я не делаю то, что хочу, а именно добавляю сумму численности населения. 18-23 и положите их туда и суммы населения 24-35.

Спасибо за любую помощь!

Ответы [ 2 ]

2 голосов
/ 09 ноября 2019

Вы правильно пытаетесь настроить условное агрегирование, но ваша логика отключена. Попробуйте эту версию:

SELECT
    State,
    race,
    sex,
    origin,
    SUM(CASE WHEN age BETWEEN 18 AND 23 THEN pop ELSE 0 END) AS [18-23],
    SUM(CASE WHEN age BETWEEN 24 AND 35 THEN pop ELSE 0 END) AS [24-35],
    SUM(CASE WHEN age BETWEEN 36 AND 85 THEN pop ELSE 0 END) AS [36-85]
FROM [StateSexOriginRaceAge]
GROUP BY
    State,
    race,
    sex,
    origin;

Обратите внимание, что нам не нужно здесь нужен подзапрос.

1 голос
/ 09 ноября 2019

Применить sum на внешней SELECT

 SELECT tbl.State, tbl.ranges, tbl.race, tbl.origin, tbl.sex,  sum(tbl.pop) as pop
  FROM (select case  
    when age between 18 and 23 then '18-23'
    when age between 24 and 35 then '24-35'
    else '36-85' end as ranges, 
    [State]
      ,race,
      sex,
      origin,
      pop

  from [StateSexOriginRaceAge]
    where sex > 0
  ) as tbl

group by tbl.State, tbl.ranges, tbl.race, tbl.sex, tbl.origin
order by state, ranges, race, origin, sex
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...