SQL Oracle中按行进行条件条件项计数

我张贴了类似的问题

SQL Oracle中的字符串列表中的条件计数

这次数据集是逐行的,但是逻辑保持不变。该项目将被一一添加到list1,2,3..。当项目添加到列表时,我使用日期。

这是数据

CREATE TABLE lists ( column1, column2 , column3) AS
SELECT 'list1', '01-01-2020' , 'car'         FROM DUAL UNION ALL
SELECT 'list1', '02-01-2020' , 'car'         FROM DUAL UNION ALL
SELECT 'list2', '01-01-2020' , 'car'         FROM DUAL UNION ALL
SELECT 'list2', '02-01-2020' , 'toy'         FROM DUAL UNION ALL
SELECT 'list2', '03-01-2020' , 'car'         FROM DUAL UNION ALL
SELECT 'list3', '01-01-2020' , 'toy'         FROM DUAL UNION ALL
SELECT 'list3', '02-01-2020' , 'cards'       FROM DUAL UNION ALL
SELECT 'list3', '03-01-2020' , 'cards'       FROM DUAL UNION ALL
SELECT 'list4', '01-01-2020' , 'car'         FROM DUAL UNION ALL
SELECT 'list4', '02-01-2020' , 'cards'       FROM DUAL UNION ALL
SELECT 'list4', '03-01-2020' , 'cards'       FROM DUAL UNION ALL
SELECT 'list5', '01-01-2020' , 'toy'         FROM DUAL UNION ALL
SELECT 'list5', '02-01-2020' , 'cards'       FROM DUAL UNION ALL
SELECT 'list5', '03-01-2020' , 'toy'         FROM DUAL UNION ALL
SELECT 'list5', '04-01-2020' , 'cards'       FROM DUAL UNION ALL
SELECT 'list6', '01-01-2020' , 'car'         FROM DUAL UNION ALL
SELECT 'list6', '02-01-2020' , 'cards'       FROM DUAL UNION ALL
SELECT 'list6', '03-01-2020' , 'toy'         FROM DUAL UNION ALL
SELECT 'list6', '04-01-2020' , 'cards'       FROM DUAL;

桌子看起来像这样

COLUMN1 COLUMN2 COLUMN3
list1   01-01-2020  car
list1   02-01-2020  car
list2   01-01-2020  car
list2   02-01-2020  toy
list2   03-01-2020  car
list3   01-01-2020  toy
list3   02-01-2020  cards
list3   03-01-2020  cards
list4   01-01-2020  car
list4   02-01-2020  cards
list4   03-01-2020  cards
list5   01-01-2020  toy
list5   02-01-2020  cards
list5   03-01-2020  toy
list5   04-01-2020  cards
list6   01-01-2020  car
list6   02-01-2020  cards
list6   03-01-2020  toy
list6   04-01-2020  cards

如果列表中只有CAR,则您要计算汽车数量。如果有非汽车项目,那么您算出添加到列表中的第一个非汽车项目

例如

list1  car   2
list2  toy   1
list3  toy   1
list4  cards 2
list5  toy   2
list6  cards 2
戈登·利诺夫

您可以使用窗口函数来获取有关列表的信息,这些信息随后可以用于过滤:

select l.column1, item_to_count,
       count(*)
from (select l.*,
             min(l.column2) keep (dense_rank first order by (case when l.column3 <> 'car' then 1 else 2 end), l.column2) over (partition by l.column1) as date_to_count,
             min(l.column3) keep (dense_rank first order by (case when l.column3 <> 'car' then 1 else 2 end), l.column2) over (partition by l.column1) as item_to_count
      from lists l
     ) l
where column3 = item_to_count and column2 >= date_to_count
group by l.column1, item_to_count
order by l.column1;

是db <>小提琴。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用条件对SQL(Oracle)中的多列进行计数?

来自分类Dev

SQL对具有满足条件的列的行进行计数

来自分类Dev

SQL Server 按组和条件对行进行排名

来自分类Dev

根据SQL Server中的特定条件对行进行分组

来自分类Dev

根据SQL Server中的条件从计数中进行计数

来自分类Dev

根据SQL Server中的条件从计数中进行计数

来自分类Dev

基于条件的Oracle SQL计数

来自分类Dev

SQL查询在3种不同条件下对行进行计数

来自分类Dev

如何根据 SAS/SQL 中的行值进行条件计数?

来自分类Dev

在Oracle SQL表的单独列中显示计数条件的结果

来自分类Dev

SQL中的条件计数返回

来自分类Dev

Oracle SQL-根据条件计数,以包含零匹配项的不同行

来自分类Dev

SQL-通过条件对行进行分组,直到找到异常

来自分类Dev

Oracle、SQL 根据连接表中的项目进行条件排除

来自分类Dev

Oracle SQL组按多个OR条件

来自分类Dev

如果条件在Oracle SQL中

来自分类Dev

Oracle SQL中的条件分组

来自分类Dev

SQL 中的 WHERE 条件 (ORACLE)

来自分类Dev

SQL查询可对按ID分组的行进行计数,但可限制每个组的计数

来自分类Dev

按年级获得重复项的主要计数(ORACLE PL/SQL)

来自分类Dev

如何在sql中按组对行进行排序

来自分类Dev

条件SQL计数

来自分类Dev

SQL中关联记录计数的条件

来自分类Dev

SQL查询对包含值的行进行计数

来自分类Dev

按 SQL 中的 2 个条件排序?

来自分类Dev

在 SQL Server 中按条件绑定表

来自分类Dev

按条件对行进行分组

来自分类Dev

如何使用proc sql进行某些条件计数

来自分类Dev

SQL如何对有条件的子集进行计数