Ich möchte das Verhältnis der Elemente in einer Gruppe, die bestimmte Kriterien erfüllen, aus der Gesamtzahl der Elemente in dieser Gruppe berechnen. Ich habe das bereits gelöst, bin aber gespannt, ob meine Lösung optimal ist, da die Abfrage problematisch lange Zeit über meinem großen (10m +) Datensatz dauert.Verhältnis der übereinstimmenden Zeilen pro Gruppe
Hier ist, was ich in seiner einfachsten Form haben:
create table #tableA
(
id int IDENTITY(1,1),
groupid int,
flag bit,
CONSTRAINT [PK_TableA] PRIMARY KEY CLUSTERED
(
[id] ASC
)
)
insert into #tableA (groupid,flag) values (1,0),(1,0),(1,1),(2,0),(2,1)
select
a.groupid ,
cast(totalCount as float)/count(*) as ratio
from
#tableA a
join
(
select
groupid,
COUNT(*) totalCount
from
#tableA
where
flag=1
group by
groupid
) b on a.groupid=b.groupid
group by
a.groupid,
b.totalCount
drop table #tableA
Gibt es eine effizientere Möglichkeit, diese Abfrage zu schreiben?
Natürlich! Danke – spender
Wenn es so funktioniert, wie du willst, solltest du dieses Akzeptieren wahrscheinlich markieren –
Ich teste noch und muss eventuell an die Frage vor dem Schließen anhängen – spender