상위 3 개 카테고리에서 상위 3 개 항목의 단일 데이터 세트를 수신하기 위해 쿼리를 작성하려고합니다.
상위 카테고리는 카테고리별로 그룹화 된 내림차순으로 ItemScore 열의 합계로 정렬됩니다. 예를 들어 카테고리 1의 점수는 23이고 카테고리 2의 점수는 22입니다.
해당 카테고리의 각 항목은 ItemScore 내림차순으로 정렬됩니다.
원시 데이터 목록은 다음과 같습니다.
여기서는 예상 결과의 예입니다.
이것이 의미가 있기를 바랍니다!
업데이트 :
여기서 작업 한 스크립트와 일부 테스트 데이터가 있습니다;
CREATE TABLE [dbo].[Test]
(
[CategoryID] [int] NULL,
[CategoryName] [varchar](100) NULL,
[ItemID] [int] NULL,
[ItemName] [varchar](100) NULL,
[ItemScore] [int] NULL
)
INSERT Test (CategoryID, CategoryName, ItemID, ItemName, ItemScore)
VALUES (1, 'Category 1', 1, 'Item 1', 1),
(1, 'Category 1', 2, 'Item 2', 2),
(1, 'Category 1', 3, 'Item 3', 7),
(1, 'Category 1', 4, 'Item 4', 1),
(1, 'Category 1', 5, 'Item 5', 1),
(2, 'Category 2', 6, 'Item 6', 1),
(2, 'Category 2', 7, 'Item 7', 1),
(2, 'Category 2', 8, 'Item 8', 9),
(2, 'Category 2', 9, 'Item 9', 10),
(2, 'Category 2', 10, 'Item 10', 2),
(3, 'Category 3', 11, 'Item 11', 1),
(3, 'Category 3', 12, 'Item 12', 1),
(3, 'Category 3', 13, 'Item 13', 2),
(3, 'Category 3', 14, 'Item 14', 1),
(3, 'Category 3', 15, 'Item 15', 2),
(4, 'Category 4', 16, 'Item 16', 5),
(4, 'Category 4', 17, 'Item 17', 6),
(4, 'Category 4', 18, 'Item 18', 3),
(4, 'Category 4', 19, 'Item 19', 5),
(4, 'Category 4', 20, 'Item 20', 1),
(5, 'Category 5', 21, 'Item 21', 2),
(5, 'Category 5', 22, 'Item 22', 8),
(5, 'Category 5', 23, 'Item 23', 5),
(5, 'Category 5', 24, 'Item 24', 3),
(5, 'Category 5', 25, 'Item 25', 4)
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY t.CategoryID ORDER BY t.ItemScore DESC) AS RowNumber
FROM
Test t
- 답변 # 1
- 답변 # 2
쿼리를 서브 쿼리로 작성하려고 시도한 다음 RowNumber
WITH summing AS ( SELECT CategoryID, CategoryName, ItemID, ItemName, ItemScore , SUM(ItemScore) OVER (PARTITION BY CategoryID) AS CategoryScore FROM Test ), rating AS ( SELECT CategoryID, CategoryName, ItemID, ItemName, ItemScore , DENSE_RANK() OVER (ORDER BY CategoryScore DESC, CategoryID) AS GrpNumber , ROW_NUMBER() OVER (PARTITION BY CategoryID ORDER BY ItemScore DESC) AS RowNumber FROM summing ) SELECT CategoryID, CategoryName, ItemID, ItemName, ItemScore, RowNumber FROM rating WHERE GrpNumber <= 3 AND RowNumber <= 3 ORDER BY GrpNumber, RowNumber;
를 얻을 수 있습니다.1
로3
sqlfiddle
SELECT * FROM ( SELECT *, Row_NUMBER() OVER (PARTITION BY t.CategoryID ORDER BY t.ItemScore DESC) AS RowNumber FROM Test t ) t1 where RowNumber <=3
관련 자료
- sql - 다른 테이블 필드에 id가 포함 된 항목을 선택하십시오
- MySQL 오류 메시지 "선택은이 서버 버전에 대해이 위치에서 유효하지 않습니다
- jquery - 선택 상자 글꼴 크기가 옵션 항목 길이에 영향을 미침
- SQL Server의 getdate ()에서 특정 시간과 분을 선택하십시오
- SQL Server 내의 특정 선택
- python - 필요한 품목 목록을 제공하여 목록에서 최적 (비용) 판매자 팀을 선택하는 방법
- PHP 서버의 현재 시간을 기준으로 Android에서 메뉴 항목 표시/숨기기
- SQL Server 선택 쿼리 속도가 느림
- r - SQL Server에서 범위 비교로 행을 선택하는 방법은 무엇입니까?
- SQL Server 선택 쿼리가 매우 느림
- reactjs - React를 사용하여 첫 번째 선택 항목의 선택을 기반으로 선택 항목을 업데이트하는 방법
- 외래 키로 SQL Server 그룹화 및 종속 열 선택
- javascript - 한 개체 배열에서 항목을 선택하고 다른 개체에 저장
- PHP MYsql | 숫자가 더 낮은 처음 4 개 항목을 선택하세요
- SQL Server의 열에서 알파벳 접두사 만 선택
- 논리 기반 SQL Server 선택 쿼리
- SQL Server에서 SELECT하여 OnHand, Sale 및 Purchase 테이블 중 하나 또는 Qty 필드가 비어 있지 않은 모든 고유 행을 표시합니다
- 이 SQL Server 조각에서 인용 부호는 무엇을 의미합니까? (SELECT ''column1, ''column 2)
- SQL SERVER Select Distinct ID가 작동하지 않습니다
- MiniZinc의 특정 항목 선택에 대한 제약
- 페이지 매김으로 SQL 쿼리 최적화
- SQL 문으로 백분율을 계산하는 방법
- T-SQL에서 이진수 값을 확인해야합니다.
- SQL Server 데이터베이스 파일의 위치는 어디에 저장됩니까?
- T-SQL : 제외 테이블을 기반으로 값을 제외하는 결과 집합을 반환하는 방법
- MSSQL에서 order by 절에 대해 n 행을 건너 뛰는 방법
- SQL Server : 저장 프로 시저의 선택적 변수
- sql : 값을 계산하고 다른 열에 표시하려면 어떻게해야합니까?
- sql : 데이터베이스의 모든 기본 테이블에 대해 모든 열의 데이터 유형을 유니 code 데이터 유형으로 변경하는 방법
- sql : 5 초 미만의 간격이있는 경우 여러 행을 하나로 병합
이것은 어떻습니까 :
먼저
CategoryScore
를 계산 (와이즈 비즈의 합 카테고리 별)그런 다음 점수에 따라 카테고리 및 항목에 '등급'을 추가
마지막으로 두 등급이 모두 3 이하인 레코드 만 반환
쿼리에 넣으면 다음과 같이 보일 수 있습니다 :