programing

서브쿼리의 출력을 조절할 수 있습니까?

powerit 2023. 10. 30. 21:20
반응형

서브쿼리의 출력을 조절할 수 있습니까?

값을 반환하는 쿼리가 있지만 쉼표로 구분된 단일 출력으로 필요합니다.

그래서 쉼표로 출력을 조절하려고 했는데 작동이 안 되나요?

select id from videos where duration=0;  /// this would return some rows

나는 concat과 concat_ws를 시도했지만 작동하지 않았습니다.

select concat(select concat(id,',') from videos where duration=0);
select concat((select id from videos where duration=0),',');
select concat_ws(',',(select id from videos where duration=0));

쉼표 부분이 있는 모든 행의 ID가 필요합니다.

예를 들어 출력은 1,4,6,78,565이어야 합니다.

무슨 생각 있어요?

group_concat이 수행하는 작업입니다.

select group_concat(id) as video_list
from videos 
where duration=0

사용해보기GROUP_CONCAT

     GROUP_CONCAT([DISTINCT] expr [,expr ...]
         [ORDER BY {unsigned_integer | col_name | expr}
             [ASC | DESC] [,col_name ...]]
         [SEPARATOR str_val])

참조 : http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

group_concat 사용:

이 함수는 그룹에서 연결된 NULL이 아닌 값이 포함된 문자열 결과를 반환합니다.NULL이 아닌 값이 없으면 NULL을 반환합니다.

SELECT
  GROUP_CONCAT(id)
FROM
  videos
WHERE
  duration=0

사용할 수 없는 문제를 해결하기 위해 노력하는 것.LIMIT와 함께GROUP_CONCAT하위 쿼리의 결과를 기준으로 그룹화할 수 있습니다.

이 쿼리는 비디오 ID를 20개 그룹으로 나눕니다(일부 데이터셋에서는 매우 느릴 수 있음).

select group_concat(v.id) as video_list
from videos as v
where v.duration=0
group by (
    select floor(count(v2.id)/20)
    from videos as v2
    where v2.duration=0
    and v2.id <= v.id
)

또는 결과가 많지만 이렇게 느린 쿼리를 원하지 않는 경우 사용자 크기로 늘릴 수 있습니다.group_concat_max_len(https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_group_concat_max_len) 당신의 것까지.max_allowed_packet(https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_max_allowed_packet), 이 길이가 여전히 충분하지 않다면 max_allowed_packet 크기도 늘려야 합니다.

언급URL : https://stackoverflow.com/questions/3812864/concat-the-output-of-the-subquery

반응형