Процентное изменение зарплаты с помощью BigQuery

Используя bigquery, я должен рассчитать процентное изменение заработной платы с 2020 по 2021 год. У меня есть фиктивные данные о занятости. Я делюсь только несколькими строками для простоты.

Выделенный столбец является обязательным столбцом, и я хочу, чтобы результат был только в этой форме.

Формула = (зарплата_2020 - зарплата_2021) / зарплата_2020 )* 100

    My query :

    with a_2020(
    SELECT * FROM `xx.salary.Sal_2020_2021` 
    where Year = 2020),
    
    b_2021 as (SELECT * FROM `xx.salary.Sal_2020_2021` 
    where  Year = 2021)
    
    select * , (a_2020.Salary - b_2021 .Salary) / a_2020.Salary )* 100 from b_2021
     join a_2020  
using (Emp_ID ,Address,Name, State)

Проблема: 1) Я получаю все поля дважды. 2) В итоге получаю только 2021 год. Не 2020

Условие соединения не требуется?

jarlh 27.09.2022 13:49

Я пропустил эту часть. Хотя теперь я добавил его.

mp.kaur 27.09.2022 13:54

Вам нужно полное внешнее объединение, если вы хотите включить людей, работающих только один год.

jarlh 27.09.2022 13:56

Я бы использовал только Emp_ID в качестве условия соединения. (Иногда люди переезжают на другой адрес.)

jarlh 27.09.2022 13:58

Для расчета прибавки возьмите новую зарплату - старую зарплату.

jarlh 27.09.2022 13:58

Что делать, если я хочу включить оба года? Любой способ сделать это?

mp.kaur 27.09.2022 14:00

полное внешнее соединение. Или пропустите соединение и вместо этого выполните GROUP BY.

jarlh 27.09.2022 14:02

Было бы очень полезно, если бы можно было упомянуть поле для GROUP By .

mp.kaur 27.09.2022 14:04
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
8
74
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Присоединяйтесь к Emp_ID и не включайте повторяющиеся значения для года. Если предположить, что в столбце года указаны только значения 2020 и 2021, этот код может работать.

SELECT 
    E1.Emp_ID AS Emp_ID,
    E1.Name AS Name,
    E1.Experience AS Experience,
    E1.Year AS Year,
    E1.Salary AS Salary,
    E1.State AS State, 
    E1.Address AS Address,
    CASE WHEN E1.Year=2021 AND E2.Year=2020 THEN ((E1.Salary-E2.Salary)/E2.Salary)*100 ELSE NULL END AS "Percent Increase in Salary"
FROM `xx.salary.Sal_2020_2021` E1 JOIN `xx.salary.Sal_2020_2021` E2 ON E1.Emp_ID=E2.Emp_ID AND E1.Year <> E2.Year
UNION ALL
SELECT 
    Emp_ID,
    Name,
    Experience,
    Year,
    Salary,
    State, 
    Address,
    NULL AS "Percent Increase in Salary"
FROM `xx.salary.Sal_2020_2021`
GROUP BY Emp_ID
HAVING COUNT(*)=1

spb- Этот код очень хорошо. Меня беспокоит только то, что он не показывает строку, если ее значение указано только для одного года. Нравятся записи Ананьи и Армаана, потому что они принадлежат одному году.

mp.kaur 27.09.2022 18:05

mp.kaur - обновлен ответ для обработки записей, принадлежащих одному году.

spb 27.09.2022 21:00

Вы можете рассмотреть приведенный ниже запрос с использованием оконной функции.

SELECT Emp_ID, Year, Salary,
       IF(Year = 2021,
          ROUND((Salary / LAG(Salary) OVER w - 1) * 100, 2), NULL
       ) AS increase
  FROM `xx.salary.Sal_2020_2021`
WINDOW w AS (PARTITION BY Emp_ID ORDER BY Year);

+--------+------+--------+----------+
| Emp_ID | Year | Salary | increase |
+--------+------+--------+----------+
|  10003 | 2020 |  15000 |          |
|  10003 | 2021 |  16700 |    11.33 |
|  10007 | 2021 |   9000 |          |
|  10012 | 2020 |  10000 |          |
|  10012 | 2021 |  13500 |     35.0 |
|  10018 | 2021 |  19000 |          |
|  10041 | 2021 |  20000 |          |
|  10041 | 2021 |  21000 |      5.0 |
+--------+------+--------+----------+

Другие вопросы по теме