2 count_big 's로 인덱싱 된보기를 만드는 데 도움이 필요합니다.
-
06-07-2019 - |
문제
좋아, 나는 사람들이 게시물에 좋고 나쁘다고 생각하는 결과를 저장하는 간단한 테이블에 대한 인덱스보기를 만들려고 노력하고 있습니다. 이것은 Thumbs Up / Thumbs Down의 결과이며 게시물에 투표합니다.
그래서 여기 내 pseduo 가짜 테이블이 있습니다 :-
HelpfulPostId INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
PostId INT NOT NULL,
IsHelpful BIT NOT NULL,
UserId INT NOT NULL
따라서 사용자는 게시물 당 하나의 투표 만 할 수 있습니다. 그것은 1 (도움이) 또는 0 (도움이되지 않는) <- 더 나은 방법이 있다면 그것을 처리하는 더 좋은 방법을 확실하지 않습니다.
확인. 내가하려는 것은 다음과 같은 것처럼 보이는 견해를 얻는 것입니다.
helpfulpostid int Identity (1,1) null 기본 키가 아님,
PostId INT NOT NULL,
IsHelpfulCount COUNT_BIG (WHERE IsHelpful = 1)
IsNotHelpfulCount COUNT_BIG (WHERE IsHelpful = 0)
그리고 마지막으로, PK에 인덱스를 추가 한 다음 PostID의 색인을 추가 할 수 있도록 회피를 가능하게 만들어야합니다.
나는 SQL에 대해 전혀 모른다. 제안이 있습니까?
건배 :)
해결책
생각 :
- 인덱스 뷰에서 Count (*)를 사용할 수 없습니다.
- 비트 필드를 집계 할 수 없습니다
다른 것이 있습니다 인덱스 뷰의 한계
CREATE VIEW dbo.Example
WITH SCHEMABINDING
AS
SELECT
PostId,
SUM(CAST(IsHelpful AS bigint)) AS IsHelpfulCount,
SUM(CAST(1-IsHelpful AS bigint)) AS IsNotHelpfulCount,
COUNT_BIG(*) AS Dummy --Used to satisfy requirement
FROM
dbo.bob
GROUP BY
PostId
GO
CREATE UNIQUE CLUSTERED INDEX IXC_Test ON dbo.Example (PostId)
GO
편집 : 원래 질문/게시물에 실수로 추가 된 Identity 필드를 제거했습니다.
편집 2 (GBN) : 인덱스 뷰의 집계가 잊어 버렸습니다. 또한 count_big (*)가 필요합니다. 따라서 더미 열로 추가하십시오. 나는 이것을 테스트했다.
보기 정의가 집계 함수를 사용하는 경우 선택 목록에는 count_big (*)도 포함해야합니다.
제휴하지 않습니다 StackOverflow