programing

MariaDB - 주문이 있는 그룹화 기준

minecode 2022. 9. 8. 23:58
반응형

MariaDB - 주문이 있는 그룹화 기준

데이터셋이 있는데 문자열에 따라 정렬하고 싶습니다.ORDER BY FIELD(field_name, ...)순서 뒤에 다른 열을 기준으로 데이터 세트를 그룹화하지 않도록 하겠습니다.

서브쿼리를 시도했지만 무시되는 것 같습니다.ORDER BY서브쿼리 될 때요

그룹화하려는 쿼리입니다.GROUP BY setting_id

SELECT *
FROM `setting_values`
WHERE ((`owned_by_type` = 'App\\Models\\Utecca\\User' AND `owned_by_id` = 1 OR ((`owned_by_type` = 'App\\Models\\Utecca\\Agreement' AND `owned_by_id` = 1006))) OR (`owned_by_type` = 'App\\Models\\Utecca\\Employee' AND `owned_by_id` = 1)) AND `setting_values`.`deleted_at` IS NULL
ORDER BY FIELD(owned_by_type, 'App\\Models\\Utecca\\Employee', 'App\\Models\\Utecca\\Agreement', 'App\\Models\\Utecca\\User')

by 오더는 정상적으로 동작하고 있습니다만, 제 오더에 근거해 그룹화할 수 없습니다.항상 프라이머리 키(id)가 가장 작은 것을 선택합니다.

여기 내 시도는 실패했어.

SELECT * FROM (
    SELECT *
    FROM `setting_values`
    WHERE ((`owned_by_type` = 'App\\Models\\Utecca\\User' AND `owned_by_id` = 1 OR ((`owned_by_type` = 'App\\Models\\Utecca\\Agreement' AND `owned_by_id` = 1006))) OR (`owned_by_type` = 'App\\Models\\Utecca\\Employee' AND `owned_by_id` = 1)) AND `setting_values`.`deleted_at` IS NULL
    ORDER BY FIELD(owned_by_type, 'App\\Models\\Utecca\\Employee', 'App\\Models\\Utecca\\Agreement', 'App\\Models\\Utecca\\User')
) AS t
GROUP BY setting_id;

여기 샘플 데이터가 있습니다.

이 샘플 데이터로 달성하려고 하는 것은 ID 3을 행으로 하는 1행입니다.
쿼리에서 원하는 결과 집합은 다음 규칙을 따라야 합니다.

  • 각 행마다 1개씩setting_id
  • owned_by_type와 함께owned_by_id다음과 같이 필터링됩니다.agreement = 1006,user = 1,employee = 1.
  • 각 행에 대해 1개의 행을 제한하는 경우setting_id그것은 다음과 같은 우선순위로 행해져야 한다.owned_by_type기둥.Employee, Agreement, User

여기 그것과 관련된 SQLFiddle이 있다.

MariaDB 버전 10.2.6-Maria 실행DB

우선 Optimizer는 내부 ORDER BY를 자유롭게 무시할 수 있습니다.그래서 당신의 의도가 무엇인지 좀 더 자세히 설명해 주세요.

이 문제를 해결하려면 다음 서브쿼리를 사용할 수 있습니다.

SELECT ...
    FROM ( SELECT
            ...
            GROUP BY ...
            ORDER BY ...  -- This is lost unless followed by :
            LIMIT 9999999999  -- something valid; or very high (for all)
         ) AS x
    GROUP BY ...

아마 당신은 그룹별로 최대를 하고 있는 것 같습니까?

언급URL : https://stackoverflow.com/questions/45758857/mariadb-group-by-with-an-order

반응형