Count 在 table 中更改值的次数
Count No of times a value changed in a table
我有一个table这样的
uid key value
---------------
125 'saf' True
152 'asd' False
152 'asd' True
162 'asd' False
162 'asd' False
我需要从上面获取更改密钥的次数 table。
例如键 'asd'
输出:
uid key count
---------------
152 'asd' 1
162 'asd' 0
SQL 表表示 无序 集。因此,您的问题并没有真正意义,因为它暗示了行的某种排序并且没有明显的排序。让我假设某些列具有此信息(比如自动递增 id
或创建日期)。
您可以使用 lag()
后接条件总和。在 RedShift 中,我认为这看起来像:
select uid, key,
sum(case when prev_value is null or prev_value <> value then 1 else 0 end) as num_changes
from (select t.*,
lag(value) over (partition by uid, key order by ??) as prev_value
from t
) t
group by uid, key;
??
是指定行顺序的列。
我有一个table这样的
uid key value
---------------
125 'saf' True
152 'asd' False
152 'asd' True
162 'asd' False
162 'asd' False
我需要从上面获取更改密钥的次数 table。
例如键 'asd' 输出:
uid key count
---------------
152 'asd' 1
162 'asd' 0
SQL 表表示 无序 集。因此,您的问题并没有真正意义,因为它暗示了行的某种排序并且没有明显的排序。让我假设某些列具有此信息(比如自动递增 id
或创建日期)。
您可以使用 lag()
后接条件总和。在 RedShift 中,我认为这看起来像:
select uid, key,
sum(case when prev_value is null or prev_value <> value then 1 else 0 end) as num_changes
from (select t.*,
lag(value) over (partition by uid, key order by ??) as prev_value
from t
) t
group by uid, key;
??
是指定行顺序的列。