用于计算状态组合的r sql代码

dwthyt8l  于 2023-01-22  发布在  其他
关注(0)|答案(1)|浏览(121)

我在SQL连接上有大数据集,例如connection = dbConnect(odbc::odbc(), dsn = "dsn", encoding = "latin1")
在大数据集中,我有3列:

  • 编号(例如111、112、113等)
  • 年份(如2010年、2011年、2012年等)
  • 状态(1或0:非数字的)。

在数据集中,每个ID出现不止一个(例如,2010年ID = 111的状态= 1,2011年ID = 111的状态= 0等)
使用SQL代码,我想找出ID的总数,其中该ID中的所有STATUS为:

  • A:仅0(例如,所有行的45%)
  • B:仅1(例如,所有行的50%)
  • C:1和0(例如,所有行的5%)
  • 我还想列出哪些ID出现在A、B、C中(例如,A = 111、112、115 ;B = 114、116等)

我读过关于dbGetQuery(connection, "insert sql code here")函数的文章,但我不知道如何编写SQL代码来计算总数并列出ID。
我该怎么做?这是窗口滞后功能吗?

31moq8wy

31moq8wy1#

可能,这个例子可以帮助你解释你的目标

select gr as 'Group',sum(idRows) rowsInGroup 
  ,sum(sum(idRows))over() rowsTotal
  ,sum(idRows)*1.0/(sum(sum(idRows))over()) pct
  ,count(*) idsCountInGroup
  ,string_agg(id,',') within group(order by id) idsInGroup  --for SQL Server
from (
select id,min(status) minS,max(status) maxS
   , count(*) as idRows  -- rows by Id
   ,case when min(status) =max(status) then --assume status mast have only 2 values
           case when min(status)='0' then 'A' else 'B' end
    else 'C' 
    end gr  --Group (A,B or C)
from bigData
group by id
) t
group by gr

相关问题