मेरे पास निम्न क्वेरी है
SELECT
JSON_EXTRACT(json, '$.Weights') as weight
from
(select '{"Weights":{"blue":1.0,"purple":0.0,"yellow":1.0,"green":1.0}}' as json)
जो लौटाता है:
{"नीला":1.0,"बैंगनी":0.0,"पीला":1.0,"हरा":1.0}
मैं देखना चाहता हूं कि रंगों के सभी मूल्यों को समाप्ति करने का कोई तरीका है या नहीं। वापसी का अर्थ:
3.0
मैं बिना किसी सफलता, किसी भी सुझाव के स्प्लिट और अननेस्ट फ़ंक्शंस का उपयोग करने का प्रयास कर रहा हूं? धन्यवाद।
2 जवाब
यहां REGEXP_EXTRACT_ALL
का उपयोग करके एक उदाहरण दिया गया है:
WITH T AS (
SELECT '{"Weights":{"blue":1.0,"purple":0.0,"yellow":1.0,"green":1.0}}' AS json
)
SELECT
(
SELECT SUM(CAST(val AS FLOAT64))
FROM UNNEST(
REGEXP_EXTRACT_ALL(
JSON_EXTRACT(json, '$.Weights'),
r':([^,}]+)')
) AS val
)
FROM T;
अन्य विकल्प तलाशने के लिए-
नीचे BigQuery मानक SQL के लिए है
पहला उदाहरण कुंजी निकालना है: प्रत्येक पंक्ति के लिए मूल्य जोड़ी
#standardSQL
WITH `project.dataset.yourTbale` AS (
SELECT 1 AS id, '{"Weights":{"blue":1.0,"purple":0.0,"yellow":1.0,"green":1.0}}' AS json
UNION ALL SELECT 2, '{"Weights":{"blue":1.0,"red":2.0,"yellow":1.0,"orange":3.0}}'
)
SELECT id,
REPLACE(SPLIT(pair, ':')[OFFSET (0)], '"', '') color,
SAFE_CAST(SPLIT(pair, ':')[OFFSET (1)] AS FLOAT64) value
FROM `project.dataset.yourTbale`,
UNNEST(SPLIT(REGEXP_REPLACE(JSON_EXTRACT(json, '$.Weights'), r'{|}', ''))) pair
यह आपको नीचे परिणाम देता है
id color value
1 blue 1.0
1 purple 0.0
1 yellow 1.0
1 green 1.0
2 blue 1.0
2 red 2.0
2 yellow 1.0
2 orange 3.0
तो अब यह आपके if there is a way to sum up all the values of the colors
के मूल प्रश्न के ऊपर विस्तार करना आसान है और विशिष्ट रंगों पर संभावित रूप से फ़िल्टरिंग के साथ इसे और भी विस्तारित करना - नीचे उदाहरण देखें
#standardSQL
WITH `project.dataset.yourTbale` AS (
SELECT 1 AS id, '{"Weights":{"blue":1.0,"purple":0.0,"yellow":1.0,"green":1.0}}' AS json
UNION ALL SELECT 2, '{"Weights":{"blue":1.0,"red":2.0,"yellow":1.0,"orange":3.0}}'
)
SELECT id,
SUM(SAFE_CAST(SPLIT(pair, ':')[OFFSET (1)] AS FLOAT64)) AS total
FROM `project.dataset.yourTbale`,
UNNEST(SPLIT(REGEXP_REPLACE(JSON_EXTRACT(json, '$.Weights'), r'{|}', ''))) pair
WHERE REPLACE(SPLIT(pair, ':')[OFFSET (0)], '"', '') != 'blue'
GROUP BY id
नीचे दिए गए परिणाम के साथ (जिसमें कैल्क से रंग = नीला शामिल नहीं है)
id total
1 2.0
2 6.0
संबंधित सवाल
नए सवाल
json
JSON (जावास्क्रिप्ट ऑब्जेक्ट नोटेशन) मशीन और मानव पठनीय होने के लिए एक क्रमबद्ध डेटा इंटरचेंज प्रारूप है। इस टैग का उपयोग देशी जावास्क्रिप्ट वस्तुओं या जावास्क्रिप्ट ऑब्जेक्ट शाब्दिकों के लिए न करें। इससे पहले कि आप कोई प्रश्न पूछें, एक JSON सत्यापनकर्ता जैसे JSONLint (https://jsonlint.com) का उपयोग करके अपने JSON को मान्य करें।