Очень полезный лайфхак, который вдохновил меня на решение моей проблемы, спасибо.
Мои данные представляют собой комбинацию пассажиров и их возраста, где возраст представляет собой строку чисел:
adults ages
------ -------------
4 "53,67,65,68"
4 "44,45,69,65"
3 "20,21,20"
3 "30,32,62"
Я хотел добавить в каждую строку столбец, содержащий разницу в возрасте между самым высоким и самым низким значением
adults ages agediff
------ ------------- -------
4 "53,67,65,68" 15
4 "44,45,69,65" 25
3 "20,21,20" 1
3 "30,32,62" 32
Это было сделано следующим, сильно вдохновленным взломом:
SELECT adults, ages, SUBTRACT(INTEGER(maxage),INTEGER(minage)) agediff FROM
(SELECT adults, ages, max(age) maxage, min(age) minage FROM
(SELECT adults, ages, age FROM
(SELECT adults, ages, REGEXP_EXTRACT(ages, r'([\d\d\,]{2})') age FROM [PaxAgeCombinations] WHERE (adults="3")),
(SELECT adults, ages, REGEXP_EXTRACT(ages, r'\d\d\,([\d\d\,]{2})') age FROM [PaxAgeCombinations] WHERE (adults="3")),
(SELECT adults, ages, REGEXP_EXTRACT(ages, r'\d\d\,\d\d\,([\d\d\,]{2})') age FROM [PaxAgeCombinations] WHERE (adults="3"))
),
(SELECT adults, ages, age FROM
(SELECT adults, ages, REGEXP_EXTRACT(ages, r'([\d\d\,]{2})') age FROM [PaxAgeCombinations] WHERE (adults="4")),
(SELECT adults, ages, REGEXP_EXTRACT(ages, r'\d\d\,([\d\d\,]{2})') age FROM [PaxAgeCombinations] WHERE (adults="4")),
(SELECT adults, ages, REGEXP_EXTRACT(ages, r'\d\d\,\d\d\,([\d\d\,]{2})') age FROM [PaxAgeCombinations] WHERE (adults="4")),
(SELECT adults, ages, REGEXP_EXTRACT(ages, r'\d\d\,\d\d\,\d\d\,([\d\d\,]{2})') age FROM [PaxAgeCombinations] WHERE (adults="4"))
)
)
person
Charlotta Öijer Thalén
schedule
10.06.2014