Decode maximum number in rows for sql

核能气质少年 提交于 2019-12-11 11:48:02

问题


I am using the #standardsql in bigquery and trying to code the maksimum ranking of each customer_id as 1, and the rest of it are 0

This is the query result so far

The query for ranking is this

ROW_NUMBER() OVER(PARTITION BY customer_id ORDER BY booking_date Asc) as ranking

What i need is to create another column like this where it decode the maximum ranking of each customerid as 1, and the number below it as 0 just like the below table

Thanks


回答1:


Based on your sample data, your ranking is unstable, because you have multiple rows with the same key values. In any case, you can still do what you want without subqueries, just using case:

select t.*,
       row_number() over (partition by customer_id order by booking_date asc) as ranking,
       (case when row_number() over (partition by customer_id order by booking_date asc) =
                  count(*) over (partition by customer_id)
             then 1 else 0
        end) as custom_coded
from t;

A more traditional way of doing essentially the same thing would be to use a descending sort:

select t.*,
       row_number() over (partition by customer_id order by booking_date asc) as ranking,
       (case when row_number() over (partition by customer_id order by booking_date desc) = 1
             then 1 else 0
        end) as custom_coded
from t;



回答2:


We can wrap your current query, and then use MAX as an analytic function with a partition by customer to compare each ranking value against the max ranking for each customer. When the ranking value equals the maximum value for a customer, then we assign 1 for the custom_coded, otherwise we assign 0.

SELECT
    customer_id, item_bought, booking_date, ranking,
    CASE WHEN ranking = MAX(ranking) OVER (PARTITION BY customer_id)
         THEN 1 ELSE 0 END AS custom_coded
FROM
(
    SELECT customer_id, item_bought, booking_date,
        ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY booking_date) ranking
    FROM yourTable
) t;


来源:https://stackoverflow.com/questions/47530329/decode-maximum-number-in-rows-for-sql

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!