prosource

sqlfiddle.com 5.5.30 및 MariaDB 5.5.31의 다른 결과

probook 2023. 11. 4. 10:52
반응형

sqlfiddle.com 5.5.30 및 MariaDB 5.5.31의 다른 결과

sqlfidle: http://sqlfiddle.com/ #!2/9a8b3/1

fiddle에서 구조와 데이터, 쿼리를 가져와 MariaDB 5.5.31로 가져오면 다른 결과를 얻을 수 있습니다.

스클피들

PID  NAME       LEAGUEPOINTS        TOTALLEAGUEPOINTS
2   Peter   16,13,9,4,2            44
1   Daniel  3425,543,234,43,29,22,21,21,19,17,13,12,12,12,11,9,9,9,8,7      4476

마리애드브

pid  name    leaguepoints       totalleaguepoints   
2   Peter   16,13,9,4,2             44
1   Daniel  3425,543,234,43,29,22,21,21,19,17,13,12,12,12,11,9,9,9,8,7,7,6,5,5,4,4,4,3,3,2,1    4520

쿼리:

SELECT                
    p.pid,
    p.name,   
    GROUP_CONCAT( gC.leaguepoints ORDER BY leaguepoints DESC ) AS leaguepoints, 
    SUM(gC.leaguepoints) AS totalleaguepoints
FROM test_golf_player p
LEFT JOIN 
(
    SELECT pid, leaguepoints, @Sequence:=IF(@PrevPid = pid, @Sequence + 1, 0) AS aSequence, @PrevPid := pid
    FROM
    (
        SELECT pid, leaguepoints
        FROM test_golf_card 
        ORDER BY pid, leaguepoints DESC
    ) Sub1
    CROSS JOIN (SELECT @PrevPid := 0, @Sequence := 0) Sub2
) gC
ON p.pid = gC.pid AND aSequence < 20
GROUP BY p.pid
ORDER BY p.name DESC 

왜 그런지 추측이라도?

MariaDB를 사용할 수 없지만, 사용자 변수가 어떻게 출력되는지 확인하기 위해 다음을 시도해 주실 수 있나요:-

SELECT  *
FROM test_golf_player p
LEFT JOIN 
(
    SELECT pid, leaguepoints, @Sequence:=IF(@PrevPid = pid, @Sequence + 1, 0) AS aSequence, @PrevPid := pid
    FROM
    (
        SELECT pid, leaguepoints
        FROM test_golf_card 
        ORDER BY pid, leaguepoints DESC
    ) Sub1
    CROSS JOIN (SELECT @PrevPid := 0, @Sequence := 0) Sub2
) gC
ON p.pid = gC.pid 
ORDER BY p.name DESC 

편집 - 결과를 보면 MariaDB가 하위 쿼리의 ORDER BY를 무시한 것 같습니다.따라서 시퀀스 번호는 랜덤 순서이며, PID가 변경되면(순서가 고정되지 않아 랜덤으로 변경됨) 재설정됩니다.약간의 구글과 이것은 MariaDB의 의도적인 기능인 것 같습니다.SQL 표준에서는 테이블을 정렬되지 않은 행 집합으로 정의하고 하위 선택 항목은 테이블로 처리되므로 의 순서는 무시됩니다(https://kb.askmonty.org/en/why-is-order-by-in-a-from-subquery-ignored/ .

그것은 약간 불리한 점입니다.지금은 생각이 안 나서 주변에 일이 있는지 잘 모르겠어요.이것이 원래의 문제를 다루기 위해서였던 것에 대해서는 아마도 효율적이지 않을 상관된 하위 선택을 사용하는 것이 필요할 것이라고 생각합니다.

언급URL : https://stackoverflow.com/questions/17547108/different-results-in-sqlfiddle-com-5-5-30-and-mariadb-5-5-31

반응형