2012-07-24 4 views
1

하위 문자열로 그룹화하려고합니다. 결과 하나만 얻습니다.하위 문자열이 반복되지 않는 MySQL GROUP BY

Region = Coastal, Value (R) = 1144900. 

나는 2 개의 결과를 얻는다고 가정합니다. 어떤 도움에 감사드립니다

SELECT 
    DISTINCT SUBSTRING_INDEX(`team_name`, '-', 1) AS 'Region', 
    SUM(`opportunities`.`value`) AS 'Value (R)' 
FROM 
    `opportunities` 
    LEFT JOIN cf_type_link_data ON cf_type_link_data.sourceid = opportunities.id 
    LEFT JOIN cf_lu_type_fields ON cf_type_link_data.fieldid = cf_lu_type_fields.id 
    LEFT JOIN cf_lu_types_fields_dropdown ON cf_type_link_data.`value` = cf_lu_types_fields_dropdown.id AND cf_lu_type_fields.id = cf_lu_types_fields_dropdown.fieldid 
    LEFT JOIN `lu_teams` ON `lu_teams`.`contactid` = `opportunities`.`user_allocation` 
    LEFT JOIN `teams` ON `teams`.`id` = `lu_teams`.`teamid` 
    LEFT JOIN `lu_opportunity_status` ON `lu_opportunity_status`.`id` = `opportunities`.`status` 
WHERE 1 
    AND `cf_lu_types_fields_dropdown`.`values` = 'Building Project' 
    AND cf_lu_type_fields.fieldname = 'Scaffolding Segment' 
    AND (`opportunities`.`expecteddate` >= '2012-01-01' AND `opportunities`.`expecteddate` <= '2012-07-24') 
GROUP BY 'Region' 
ORDER BY cf_lu_types_fields_dropdown.`values`; 

:

내 코드입니다.

+0

테이블 데이터의 예를 살펴볼 필요가 있습니다. –

답변

0

당신은

SELECT DISTINCT SUBSTRING_INDEX(team_name, '-', 1) AS 'Region', 
     SUM(opportunities.value) AS 'Value (R)'.... 

GROUP BY SUBSTRING_INDEX(team_name, '-', 1) 
ORDER BY cf_lu_types_fields_dropdown.values; 
+0

예, SQL 서버와 달리 MySQL이 허용합니다. –

+0

두 가지 결과를 얻지 만 문제는 Coastal에서 결과 중 하나 인 해안에 2 개의 결과가 있다고 가정합니다 (값은 903400이지만 다른 결과가 누락되어 1144900이어야 함). – Wesley

0

이 필드 식별자에 대한 따옴표를 사용하지 않으려 고 노력

GROUP BY 절에 선택에서 동일한 별칭을 사용할 수 없습니다 -

'지역'-> 지역

귀하의 경우에는 문자열 '지역'별로 그룹화하기 때문에 결과 데이터 세트에 하나의 레코드 만 표시되지만 값으로 그룹화해야합니다.

+0

값별로 그룹화하면 여전히 1 개의 결과가 표시됩니다. – Wesley

+0

그런 다음 쿼리는 하나의 값을 반환합니다. 이 값을 확인하십시오 -'SUBSTRING_INDEX ('team_name', '-', 1)', WHERE 조건을 확인하십시오. – Devart

+0

2 개의 값을 반환한다는 것을 알고 있습니다. 나는 결과를 볼 수 있기 때문에. 위의 대답은 2 개의 결과 각각에 여러 개의 결과가 있지만 1을 반환하는 것을 제외하고는 작동합니다. – Wesley