[英]Counting each row once for each id and getting the count SQL Select query
因此,我在具有屬性cid,wid,did的表中具有一系列ID,其中該表中的條目可以為null,但是如果它們不為null,則行中的條目將相等。 這對應於電影攝制組成員的ID,作家和導演的ID。
我想要做的是選擇曾拍攝3部或以上影片的ID。 考慮它是一個for循環,我想象我有一個字典,其鍵為id,並且我想遍歷數組的每一行,在該行的字典的id中添加一個,然后我可以只使用HAVING子句選擇COUNT> = 3的子句。
我的主要問題是,即使ID連續出現多次,我也不想重復計算ID。
這是數據示例:
cid | did | wid
----------+----------+----------
00000027 | |
00000209 | |
00000205 | |
00000206 | |
00000207 | |
00000208 | |
00001140 | |
00000306 | |
00000307 | |
00000325 | |
00000349 | |
00001077 | |
00001078 | |
00001079 | 00001079 | 00001079
00001079 | 00001079 | 00001079
00001082 | |
00001083 | |
00001084 | |
00001085 | |
00001091 | |
00001092 | |
00001093 | |
00001094 | |
00001095 | |
00001096 | 00001096 |
00001101 | |
00001102 | |
00001104 | 00001104 | 00001104
00001104 | 00001104 | 00001104
00001104 | 00001104 | 00001104
00001314 | |
00001315 | |
00001316 | |
00001321 | |
00001322 | |
00001323 | |
00001328 | |
00001329 | |
00001330 | |
00001335 | |
00001336 | |
00001337 | |
00001345 | |
00001345 | |
| | 00001344
| | 00000461
| | 00001344
| | 00001332
SELECT cid, count(*) "nrOfFilms"
FROM people
GROUP BY cid
HAVING nrOfFilms >= 3
您可以嘗試一下,首先,根據您的陳述,需要根據任何非值將所有列合並為一個。 之后,您可以輕松地應用group by
, having
必須獲得所需的結果。
; with cte as (
select case when isnull(cid,0)=0
then case when isnull(did,0)=0
then isnull(wid,0)
else isnull(did,0) end
else isnull(cid,0) end as Uid from table
)
select distinct uid, count(1) as CountId from cte
group by uid having count(uid)>2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.