选择每行中的最大值在SQL中。

huangapple go评论92阅读模式
英文:

Choose the max value out of options per row in SQL

问题

以下是翻译好的部分:

  1. 我在BigQuery中有一个表,看起来像这样:
  2. ID OPTIONS A B C D E
  3. 1 ['A','C'] 0.1 0.9 0.3 0.7 0
  4. 2 ['B','C'] 0.2 0.3 0.4 0.6 1
  5. 3 ['A','D'] 0.3 0.4 0.5 0.1 0.6
  6. 我想从'OPTIONS'列中的每一行中获取最大的选项,示例:
  7. ID OPTIONS A B C D E MAX_OPTION
  8. 1 ['A','C'] 0.1 0.9 0.3 0.7 0. C
  9. 2 ['B','C'] 0.2 0.3 0.4 0.6 1 C
  10. 3 ['A','D'] 0.3 0.4 0.5 0.1 0.6 A
  11. 这是我尝试过的查询:
  12. SELECT
  13. ID,
  14. GREATEST(
  15. IF('A' IN UNNEST(REGEXP_EXTRACT_ALL(bonus_options, r'"([^"]+)"')), A, -99999),
  16. IF('B' IN UNNEST(REGEXP_EXTRACT_ALL(bonus_options, r'"([^"]+)"')), B, -99999),
  17. IF('C' IN UNNEST(REGEXP_EXTRACT_ALL(bonus_options, r'"([^"]+)"')), C, -99999),
  18. IF('D' IN UNNEST(REGEXP_EXTRACT_ALL(bonus_options, r'"([^"]+)"')), D, -99999),
  19. IF('E' IN UNNEST(REGEXP_EXTRACT_ALL(bonus_options, r'"([^"]+)"')), E, -99999),
  20. ) AS MAX_OPTION
  21. FROM
  22. `TABLE`
  23. 但是我在MAX_OPTION中得到NULL。我可以做什么?
英文:

I have a table in BigQuery that looks like that:

  1. ID OPTIONS A B C D E
  2. 1 ['A','C'] 0.1 0.9 0.3 0.7 0
  3. 2 ['B','C'] 0.2 0.3 0.4 0.6 1
  4. 3 ['A','D'] 0.3 0.4 0.5 0.1 0.6

I want to get the maximum option per row out of 'OPTIONS', example:

  1. ID OPTIONS A B C D E MAX_OPTION
  2. 1 ['A','C'] 0.1 0.9 0.3 0.7 0. C
  3. 2 ['B','C'] 0.2 0.3 0.4 0.6 1 C
  4. 3 ['A','D'] 0.3 0.4 0.5 0.1 0.6 A

This is what I tried:

  1. SELECT
  2. ID,
  3. GREATEST(
  4. IF('A' IN UNNEST(REGEXP_EXTRACT_ALL(bonus_options, r'"([^"]+)"')), A, -99999),
  5. IF('B' IN UNNEST(REGEXP_EXTRACT_ALL(bonus_options, r'"([^"]+)"')), B, -99999),
  6. IF('C' IN UNNEST(REGEXP_EXTRACT_ALL(bonus_options, r'"([^"]+)"')), C, -99999),
  7. IF('D' IN UNNEST(REGEXP_EXTRACT_ALL(bonus_options, r'"([^"]+)"')), D, -99999),
  8. IF('E' IN UNNEST(REGEXP_EXTRACT_ALL(bonus_options, r'"([^"]+)"')), E, -99999),
  9. ) AS MAX_OPTION
  10. FROM
  11. `TABLE`

But I get NULL in MAX_OPTION.
What can I do?

答案1

得分: 1

以下是您请求的代码部分的翻译:

  1. SELECT
  2. * EXCEPT (MAX_OPTION),
  3. CASE
  4. WHEN A=MAX_OPTION THEN 'A'
  5. WHEN B=MAX_OPTION THEN 'B'
  6. WHEN C=MAX_OPTION THEN 'C'
  7. WHEN D=MAX_OPTION THEN 'D'
  8. WHEN E=MAX_OPTION THEN 'E'
  9. END as MAX_OPTION
  10. FROM (
  11. SELECT
  12. ID,
  13. GREATEST(
  14. IF('A' IN UNNEST(REGEXP_EXTRACT_ALL(bonus_options, r'"([^"]+)"')), A, -99999),
  15. IF('B' IN UNNEST(REGEXP_EXTRACT_ALL(bonus_options, r'"([^"]+)"')), B, -99999),
  16. IF('C' IN UNNEST(REGEXP_EXTRACT_ALL(bonus_options, r'"([^"]+)"')), C, -99999),
  17. IF('D' IN UNNEST(REGEXP_EXTRACT_ALL(bonus_options, r'"([^"]+)"')), D, -99999),
  18. IF('E' IN UNNEST(REGEXP_EXTRACT_ALL(bonus_options, r'"([^"]+)"')), E, -99999),
  19. ) AS MAX_OPTION
  20. FROM
  21. `TABLE`)
英文:
  1. SELECT
  2. * EXCEPT (MAX_OPTION),
  3. CASE
  4. WHEN A=MAX_OPTION THEN 'A'
  5. WHEN B=MAX_OPTION THEN 'B'
  6. WHEN C=MAX_OPTION THEN 'C'
  7. WHEN D=MAX_OPTION THEN 'D'
  8. WHEN E=MAX_OPTION THEN 'E'
  9. END as MAX_OPTION
  10. FROM (
  11. SELECT
  12. ID,
  13. GREATEST(
  14. IF('A' IN UNNEST(REGEXP_EXTRACT_ALL(bonus_options, r'"([^"]+)"')), A, -99999),
  15. IF('B' IN UNNEST(REGEXP_EXTRACT_ALL(bonus_options, r'"([^"]+)"')), B, -99999),
  16. IF('C' IN UNNEST(REGEXP_EXTRACT_ALL(bonus_options, r'"([^"]+)"')), C, -99999),
  17. IF('D' IN UNNEST(REGEXP_EXTRACT_ALL(bonus_options, r'"([^"]+)"')), D, -99999),
  18. IF('E' IN UNNEST(REGEXP_EXTRACT_ALL(bonus_options, r'"([^"]+)"')), E, -99999),
  19. ) AS MAX_OPTION
  20. FROM
  21. `TABLE`)

huangapple
  • 本文由 发表于 2023年4月19日 16:10:15
  • 转载请务必保留本文链接:https://go.coder-hub.com/76052124.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定