편집 3 - MySQL 버전은 8.0.33입니다.
편집 2 - 하단에서 최종 작업 코드를 확인하세요. @Akina님 감사합니다!
스포츠 경기에 대한 점수표가 있습니다. 테이블에는 내가 선택하고 싶은 세 가지 관련 필드가 있습니다 -
scoreID
기본 키 값으로classifierID
특정 코스 레이아웃에 대한 세부 정보가 포함된 다른 테이블의 기본 키에 매핑됩니다. calculatedPercent
은 특정 이벤트이 테이블에는 WHERE 절에서 사용하는 세 가지 다른 필드가 있지만 이는 부수적인 것입니다.
calculatedPercent
选择四个最佳值,并规定 classifierID
不能重复。我需要能够捕获 scoreID
에 가장 적합한 네 가지 값을 선택하고
캡처할 수 있어야 합니다.
첫 번째 쿼리입니다. calculatedPercent
值的行选择了 scoreID
值。然后我注意到有几个成员在同一门课程上获得了第一和第二高分,这违反了 classifierID
으아악
값을 가진 행을 선택하기 때문에 이것이 훌륭하다고 생각했습니다. 그러다가 여러 회원이 동일한 코스에서 첫 번째와 두 번째로 높은 점수를 받았음을 발견했습니다. 이는 값 중복 금지라는
요구 사항을 위반한 것입니다.SELECT DISTINCT를 시도해 보았지만 결국 나에게 정말로 필요한 것은 GROUP BY라는 것을 깨달았습니다. 그래서 조사를 해보니 MySql에서 쿼리를 실행할 때 only_full_group_by와 관련된 오류가 발생하는 것을 발견했지만 문제가 완전히 해결되지는 않았습니다.
다음에 시도한 것:
으아악다음 오류 메시지입니다:
#1055 - ORDER BY 절의 표현식 #1은 GROUP BY 절에 없으며 GROUP BY 절의 열에 기능적으로 종속되지 않는 비집계 열 ".masterScores.calculatedPercent"를 포함합니다. 이는 일관성이 없습니다. sql_mode=only_full_group_by는 호환되지 않습니다masterScores
.scoreID
列使用 MIN 和 MAX,但它与预期不符; scoreID
主键值并不总是所选 calculatedPercent
的值。我在某处读到,因为 scoreID
masterScores
.scoreID
열에 MIN 및 MAX를 사용하는 것을 고려했지만 예상대로 작동하지 않습니다.
값이 아닙니다.
가 기본 키이므로 ANY_VALUE 집계를 사용하여 이 문제를 해결할 수 있다는 내용을 어딘가에서 읽었습니다. 나는 이것을 시도했다: 값을 반환하지는 않습니다. classifierID
选择 1 个 calculatedPercent
和 1 个 scoreID
值。如果不按 classifierID
分组,则每个 classifierID
classifierID
所选的 calculatedPercent
지정된 WHERE 절을 기준으로 각
로 그룹화하지 않으면 각 calculatedPercent
는 WHERE 절을 만족하는 0~400개의 행을 가질 수 있으므로 여기서는 GROUP BY가 적절하다고 생각합니다.
각 그룹에 대해 선택한 calculatedPercent
선택한 각 행에 대해 동일한 행을 보장 scoreID
值实际上代表与选定的 calculatedPercent
합니다(현재는 이 지점이 백분율이 계산되고 쿼리가 실패하는 지점입니다).
다음은 데이터의 하위 집합입니다. 예:
점수 ID | 분류자 ID | 최고의 백분율 |
---|---|---|
58007 | 42 | 66.60 |
63882 | 42 | 64.69 |
64685 | 54 | 64.31 |
58533 | 32 | 63.20 |
55867 | 42 | 62.28 |
66649 | 7 | 56.79 |
55392 | 12 | 50.28 |
58226 | 1 | 49.52 |
55349 | 7 | 41.10 |
쿼리를 실행할 때 원하는 출력은 다음과 같습니다.
점수 ID | 분류자 ID | 최고의 백분율 |
---|---|---|
58007 | 42 | 66.60 |
64685 | 54 | 64.31 |
58533 | 32 | 63.20 |
66649 | 7 | 56.79 |
쿼리를 실행할 때의 실제 출력은 다음과 같습니다.
점수 ID | 분류자 ID | 최고의 백분율 |
---|---|---|
55867 | 42 | 66.60 |
64685 | 54 | 64.31 |
58533 | 32 | 63.20 |
55349 | 7 | 56.79 |
그림과 같이 실제 출력의 첫 번째 행과 네 번째 행의 scoreID
값이 올바르지 않습니다.
지금은 어떤 제안이라도 환영합니다.
편집 2 - 최종 작업 솔루션
으아아아문제가 발생한 6가지 사례에 대해 이를 테스트할 수 있었고 솔루션으로 모든 문제가 해결되었습니다. @Akina에게 다시 한 번 감사드립니다!
이 문제는 해결된 것으로 표시됩니다.
으아악
(classifierID,calculatedPercent)
不唯一,那么每个classifierID
경우 여러 회선을 받을 수 있습니다. 이 경우에는ROW_NUMBER()
를 사용해야 합니다.으아악