Ich mag ein Ergebnis in Form zeigen, dass zunächst drei Werte des Benutzers sollten in einem Spaltennamen Gruppe als Text Gruppe1 und 4 bis 10 Werte des Benutzers sichtbar seinen Text zu erhalten group2 und Ruhe Group3
ist unten für BigQuery Standard-SQL
#standardSQL
SELECT
user_id,
CASE
WHEN pos BETWEEN 1 AND 3 THEN 1
WHEN pos BETWEEN 4 AND 10 THEN 2
ELSE 3
END grp,
SUM(amount_paid) amount_paid
FROM (
SELECT
user_id, amount_paid,
ROW_NUMBER() OVER(PARTITION BY user_id ORDER BY amount_paid DESC) pos
FROM customer
)
GROUP BY user_id, grp
-- ORDER BY user_id, grp
Sie können t est/spielen mit unter Dummy-Daten erzeugt
#standardSQL
WITH users AS (
SELECT user_id FROM UNNEST(GENERATE_ARRAY(1,5)) user_id
),
amounts AS (
SELECT ROUND(50 * RAND()) amount_paid FROM UNNEST(GENERATE_ARRAY(1,50)) amount_paid
),
customer AS (
SELECT user_id, ROUND(amount_paid * RAND()) amount_paid
FROM users
CROSS JOIN amounts
)
SELECT
user_id,
CASE
WHEN pos BETWEEN 1 AND 3 THEN 1
WHEN pos BETWEEN 4 AND 10 THEN 2
ELSE 3
END grp,
SUM(amount_paid) amount_paid
FROM (
SELECT
user_id, amount_paid,
ROW_NUMBER() OVER(PARTITION BY user_id ORDER BY amount_paid DESC) pos
FROM customer
)
GROUP BY user_id, grp
ORDER BY user_id, grp
Die Ausgabe aussehen wird unter
user_id grp amount_paid
1 1 147.0
1 2 323.0
1 3 879.0
2 1 147.0
2 2 323.0
2 3 879.0
. . .
so müssen Sie noch Anteil berechnen, die (aus Ihrer Frage und hoffentlich) nicht ein Problem für Sie
hinzugefügt Anteilsberechnung
#standardSQL
WITH grps AS (
SELECT
user_id,
CASE
WHEN pos BETWEEN 1 AND 3 THEN 1
WHEN pos BETWEEN 4 AND 10 THEN 2
ELSE 3
END grp,
SUM(amount_paid) amount_paid
FROM (
SELECT
user_id, amount_paid,
ROW_NUMBER() OVER(PARTITION BY user_id ORDER BY amount_paid DESC) pos
FROM customer
)
GROUP BY user_id, grp
)
SELECT * ,
ROUND(amount_paid/SUM(amount_paid) OVER(PARTITION BY user_id), 3) share
FROM grps
-- ORDER BY user_id, grp
Danke viel Mikhail :) – Mahesh
verschachtelte Abfrage wäre in Ordnung - ich sehe nicht eine Notwendigkeit, alles in einem Lauf zu haben. es ist natürlich sexy, aber weniger fehleranfällig und schwer zu pflegen. Fühlen Sie sich gut über verschachtelte Abfragen - versuchen Sie es einfach und lassen Sie uns wissen, ob noch Hilfe dabei benötigt wird: o) –
Hallo Mikhail, ich habe versucht, aber ich bekomme keinen Erfolg. Würdest du führen, wie ich das lösen könnte? – Mahesh