Привет Герхард, это здорово! Я не об использовании ROW_NUMBER
, но это действительно работает :). Очень полезно, если вы хотите иметь такой запрос в представлении!
У меня есть два дополнительных предложения:
- порядок score
должен быть нисходящим, так как нас интересует вторая по достоверности метка
- подзапросы в предложениях ARRAY
могут быть FROM
полями массива напрямую без UNNEST
-ing, но вам нужно псевдоним исходной таблицы
Запрос становится таким (предложения выделены жирным шрифтом):
WITH scores_and_data AS ( SELECT data.object_id, ARRAY( SELECT AS STRUCT score, description, ROW_NUMBER() OVER (ORDER BY score DESC) AS rn FROM data.labelAnnotations ) AS scores FROM `bigquery-public-data.the_met.vision_api_data` data ) SELECT * EXCEPT (scores), ARRAY( SELECT AS STRUCT * EXCEPT(rn) FROM data.scores ) AS labelAnnotations, ARRAY( SELECT AS STRUCT * EXCEPT (rn) FROM data.scores WHERE rn = 2 ) AS second_most_confident_labelAnnotation FROM scores_and_data data
Спасибо!
EDIT:После некоторого исследования задача может быть выполнена довольно просто с помощью команды OFFSET
:
SELECT object_Id, ARRAY( SELECT AS STRUCT score, description FROM data.labelAnnotations ORDER BY score DESC )[OFFSET(1)] AS second_most_confident_labelAnnotation FROM `bigquery-public-data.the_met.vision_api_data` data WHERE ARRAY_LENGTH(data.labelAnnotations)>1