Есть ли способ уменьшить значение на процент и увеличить другие в той же таблице, не выбирая 1 на 1 - PullRequest
1 голос
/ 13 мая 2019

Мне нужна помощь в построении SQL-запроса, я опубликую свою домашнюю работу, немного сложно объяснить ... чтобы вы могли лучше понять, в чем моя проблема:

Увеличение населения главного города на 1%, представляющих жителей муниципалитетов, переезжающих в главный город. Пример:

Лондонский город и муниципалитеты (используется переводчик Google, извините, если есть ошибки): 600000 жителей

London city: 300000 inh.
   Municipality1:50000 inh
   Municipality1:80000 inh
   Municipality1:70000 inh
   Municipality1:100000 inh

увеличение города на 2%

London city: 306000 inh.
   Municipality1:49000 inh
   Municipality1:78400 inh
   Municipality1:68600 inh
   Municipality1:98000 inh

В моей базе данных есть эта таблица tab_municipalities.

**Municipality_description**|**Inhabitants**| **Province**
London-------------------------|300k---------| London
Muni1---------------------------|50k-----------| London
Muni2---------------------------|80k-----------| London
Muni3---------------------------|70k-----------| London
Muni4---------------------------|100k---------| London

Итак, есть ли способ изменить процент жителей Главного города и поменять муниципалитеты, не выбирая их один за другим?

Я думал о чем-то вроде этого:

set tab_municipalities update London=(London*1.02);

Моя проблема возникает здесь ... Как я "распределяю" прирост главного города на каждый муниципалитет, уменьшая их жителей? Извините, если я написал все эти подробности, но я хотел бы получить более четкое представление о том, что я должен был сделать ... Мне нужно перенести этот запрос в проект Java.

Спасибо за вашу помощь и извините за мой плохой английский.

Ответы [ 2 ]

1 голос
/ 13 мая 2019

Поскольку в этом примере Лондонский город содержит половину от общей численности населения, мы можем просто добавить 2% для города и удалить 2% из всех других рядов напрямую (без использования некоторой суммы, которая должна быть распределена).

Используйте CASE при обновлении

UPDATE tab_municipalities 
SET Inhabitants = CASE WHEN Municipality_description = 'London' THEN Inhabitants * 1.02
                  ELSE Inhabitants * 0.98
                  END
WHERE Province = 'London'
0 голосов
/ 13 мая 2019

Вы работаете по правильному пути, но думаете слишком точно. В SQL вы ОБНОВЛЯЕТЕ таблицу и устанавливаете столбец

 UPDATE tab_municipalities
 set inhabitants = inhabitants*1.02 
 WHERE province='London' and municipality_description='London'

Затем можно выполнить второе ОБНОВЛЕНИЕ, чтобы выполнить расчет для сокращения муниципалитетов: -

 UPDATE tab_municipalities
 set inhabitants = inhabitants*0.98 
 WHERE province='London' and municipality_description<>'London'

В идеале вам нужно отделить Главный Город от его членов. Вы можете иметь отдельную таблицу для «городов», а затем связать муниципалитет через Town_id. Это сделало бы ваши данные намного более четкими, так как в тот момент, когда вы смешали использование таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...