문제

좋아, 나는 사람들이 게시물에 좋고 나쁘다고 생각하는 결과를 저장하는 간단한 테이블에 대한 인덱스보기를 만들려고 노력하고 있습니다. 이것은 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 (*)도 포함해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top