일대 다 관계의 왼쪽 조인에 대한 집계 함수가있는 SQL 쿼리

밀 진스

나는 각 사용자가 난이도로 평가되는 많은 작업을 가지고있는 일대 다 관계를 가지고 있습니다. 가장 어려운 작업과 함께 각 사용자를 한 번씩 보여주는 목록을 쿼리하고 싶습니다.

사용자 테이블 : user_id, 사용자 이름

작업 테이블 : user_id, task_id, 작업 이름, 난이도

나는 같은 쿼리를 시도했다

SELECT u.user_id, u.username, t.task_id, t.taskname, MAX(t.difficulty)
FROM users u
LEFT JOIN tasks t ON u.user_id = t.user_id
GROUP BY u.user_id

그러나 not in GROUP BY clause이것을 실행할 때 오류가 발생합니다.

제임스 L.

한 명의 사용자가 동일한 최대 난이도를 가진 두 개의 작업이 없다고 가정하면 다음과 같이 할 수 있습니다. 그러나 이것은 매우 성능이 좋지 않습니다. 작은 데이터 세트에서는 잘 작동하지만 데이터 세트가 매우 큰 경우 다시 디자인해야합니다. 바라건대 그것은 당신이 올바른 방향을 가리 키도록 할 것입니다.

declare @users table (user_id int, username varchar(10))
declare @tasks table (task_id int, user_id int, taskname varchar(24), difficulty int)

insert into @users values
(1, 'John'),
(2, 'Sally'),
(3, 'Sam')

insert into @tasks values
(1, 1, 'prepare grocery list', 1),
(2, 1, 'do shopping', 2),
(3, 1, 'cook food', 3),
(4, 2, 'do shopping', 2),
(5, 2, 'prepare grocery list', 1),
(6, 3, 'cook food', 3)

select u.user_id, u.username, t.task_id, t.taskname, t.difficulty
from   @users u
       left join @tasks t on u.user_id = t.user_id
where  t.difficulty = (
         select max(x.difficulty)
         from   @tasks x
         where  t.user_id = x.user_id
       )

이것은 더 성능이 좋습니다.

select u.user_id, u.username, t.task_id, t.taskname, t.difficulty
from   @users u
       left join @tasks t on u.user_id = t.user_id
       inner join (
         select x.user_id, max(x.difficulty) as max_difficulty
         from   @tasks x
         group by x.user_id
       ) as y on t.user_id = y.user_id and t.difficulty = y.max_difficulty

이 두 쿼리는 모두 다음 데이터 세트를 반환합니다.

user_id     username   task_id     taskname                 difficulty
----------- ---------- ----------- ------------------------ -----------
1           John       3           cook food                3
2           Sally      4           do shopping              2
3           Sam        6           cook food                3

사용자에게 동일한 난이도의 최대 작업이 두 개있는 경우 쿼리에는 해당 사용자에 대한 두 개의 행이 포함됩니다.

이 SQL에 대한 쿼리 계획을 보여 주면 두 번째 쿼리 비용이 첫 번째 쿼리 비용의 거의 두 배에 달한다는 것을 알 수 있습니다. max()where절은 걸릴 배치보다 더 효율적인 것으로 보인다 max()from절. 실제 데이터에 대해 두 가지 방법을 모두 시도하고 쿼리 계획 / 비용이 무엇인지 확인합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Postgres와 일대 다 관계가있는 SQL 집계 쿼리

분류에서Dev

PL-SQL-일대 다 관계 왼쪽 조인의 첫 번째 레코드

분류에서Dev

js-data-sql DSSqlAdapter는 hasOne 관계에 대한 왼쪽 조인을 만듭니다.

분류에서Dev

table1 및 table2의 기본 키에 대한 mysql의 왼쪽 조인에 대한 SQL 쿼리가 동일하지 않습니다.

분류에서Dev

다 대다 관계에 대한 단일 SQL 쿼리

분류에서Dev

왼쪽 조인 쿼리에 집계 함수의 일부로 지정된식이 포함되어 있지 않습니다.

분류에서Dev

하나의 쿼리에서 동일한 테이블에 대한 여러 개의 왼쪽 조인 계산

분류에서Dev

단일 값에 대한 쿼리에서 시작하는 SQL의 여러 집계

분류에서Dev

다 대다 JOIN에 존재하는 다중 관계에 대한 SQL 쿼리

분류에서Dev

SQL의 다중 레벨 관계형 파일에 대한 리턴 수

분류에서Dev

부모 자식 관계가있는 SQL 쿼리에 대한 Linq

분류에서Dev

Postgres 쿼리에서 둘 이상의 일대 다 관계 관리

분류에서Dev

집계 함수가있는 동적 SQL 쿼리를 JSON 배열 집합으로 구문 분석하는 방법에 대한 조언

분류에서Dev

Entity Framework는 일대 다 관계에 대한 쿼리를 만듭니다.

분류에서Dev

다 대다 관계에서 조인 및 조건이있는 쿼리 작성기

분류에서Dev

다 대다 관계에서 조인 및 조건이있는 쿼리 작성기

분류에서Dev

어떤 관계가 이건 한 쪽에서 일대일로 그리고 다른 쪽에서 다 대일

분류에서Dev

MySQL, 다 대다 관계 쿼리 조인

분류에서Dev

테이블 간의 일대 다 관계에서 행을 제외하는 방법 (SQL 쿼리)

분류에서Dev

다형성 관계에 대한 SQL 쿼리-Rails 4

분류에서Dev

일대 다 관계에 대한 MYSQL 쿼리

분류에서Dev

다 대다 관계가있는 두 테이블에 대한 CTE 재귀 쿼리

분류에서Dev

EclipseLink : 중첩 왼쪽 조인에 대한 추가 SQL 쿼리를 피하는 방법

분류에서Dev

Google 시트 쿼리 왼쪽 조인 일대 다

분류에서Dev

일대 다 관계의 여러 계층을 통한 MYSQL 쿼리

분류에서Dev

0 또는 일대일 관계의 경우 linq 쿼리에서 SQL 프로젝션을 제한하는 방법

분류에서Dev

한쪽에만 탐색 속성이있는 일대 다 관계?

분류에서Dev

동일한 ID이지만 다른 값의 합계에 대한 SQL 쿼리?

분류에서Dev

쿼리 최적화-SQL에서 효율적으로 일대 다 관계 테이블의 결과 조합

Related 관련 기사

  1. 1

    Postgres와 일대 다 관계가있는 SQL 집계 쿼리

  2. 2

    PL-SQL-일대 다 관계 왼쪽 조인의 첫 번째 레코드

  3. 3

    js-data-sql DSSqlAdapter는 hasOne 관계에 대한 왼쪽 조인을 만듭니다.

  4. 4

    table1 및 table2의 기본 키에 대한 mysql의 왼쪽 조인에 대한 SQL 쿼리가 동일하지 않습니다.

  5. 5

    다 대다 관계에 대한 단일 SQL 쿼리

  6. 6

    왼쪽 조인 쿼리에 집계 함수의 일부로 지정된식이 포함되어 있지 않습니다.

  7. 7

    하나의 쿼리에서 동일한 테이블에 대한 여러 개의 왼쪽 조인 계산

  8. 8

    단일 값에 대한 쿼리에서 시작하는 SQL의 여러 집계

  9. 9

    다 대다 JOIN에 존재하는 다중 관계에 대한 SQL 쿼리

  10. 10

    SQL의 다중 레벨 관계형 파일에 대한 리턴 수

  11. 11

    부모 자식 관계가있는 SQL 쿼리에 대한 Linq

  12. 12

    Postgres 쿼리에서 둘 이상의 일대 다 관계 관리

  13. 13

    집계 함수가있는 동적 SQL 쿼리를 JSON 배열 집합으로 구문 분석하는 방법에 대한 조언

  14. 14

    Entity Framework는 일대 다 관계에 대한 쿼리를 만듭니다.

  15. 15

    다 대다 관계에서 조인 및 조건이있는 쿼리 작성기

  16. 16

    다 대다 관계에서 조인 및 조건이있는 쿼리 작성기

  17. 17

    어떤 관계가 이건 한 쪽에서 일대일로 그리고 다른 쪽에서 다 대일

  18. 18

    MySQL, 다 대다 관계 쿼리 조인

  19. 19

    테이블 간의 일대 다 관계에서 행을 제외하는 방법 (SQL 쿼리)

  20. 20

    다형성 관계에 대한 SQL 쿼리-Rails 4

  21. 21

    일대 다 관계에 대한 MYSQL 쿼리

  22. 22

    다 대다 관계가있는 두 테이블에 대한 CTE 재귀 쿼리

  23. 23

    EclipseLink : 중첩 왼쪽 조인에 대한 추가 SQL 쿼리를 피하는 방법

  24. 24

    Google 시트 쿼리 왼쪽 조인 일대 다

  25. 25

    일대 다 관계의 여러 계층을 통한 MYSQL 쿼리

  26. 26

    0 또는 일대일 관계의 경우 linq 쿼리에서 SQL 프로젝션을 제한하는 방법

  27. 27

    한쪽에만 탐색 속성이있는 일대 다 관계?

  28. 28

    동일한 ID이지만 다른 값의 합계에 대한 SQL 쿼리?

  29. 29

    쿼리 최적화-SQL에서 효율적으로 일대 다 관계 테이블의 결과 조합

뜨겁다태그

보관