반응형
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
반응형
'programing' 카테고리의 다른 글
Python에서 여러 줄의 dict를 포맷하는 적절한 방법은 무엇입니까? (0) | 2022.09.09 |
---|---|
여기 뭐가 문제인지 알 수가 없어요 (0) | 2022.09.09 |
D_XOPEN_SOURCE는 무엇을 의미합니까? (0) | 2022.08.25 |
C에서의 화살표 연산자(->) 사용법 (0) | 2022.08.25 |
Vue 라우터 및 Cordova(Vue.js) (0) | 2022.08.25 |