비슷한 항목을 검색하려고 시도했지만 지금까지는 행운을 찾지 못했습니다.사용자 정의 값을 사용하는 MySQL GROUP BY
전화기 로그 (ID, 번호, 원본 및 전화 이름)가 포함 된 테이블에서 쿼리가 실행되었습니다. 그 목적은 전화 이름에 다른 criterias별로 그룹화 된 총 통화 수를 가져 오는 것입니다 (4 ~ 5 가지 통화가 있음). 현재이 같은 일을 해요 :
SELECT COUNT(phones_statistics.id) AS number_of_calls, phones_statistics.calldate
FROM phones_statistics
INNER JOIN phones ON phones_statistics.phone_id = phones.id
WHERE phones.abbr NOT LIKE '@%'
GROUP BY
YEAR(phones_statistics.calldate)
+ '-'
+ MONTH(phones_statistics.calldate)
+ '-'
+ DAY(phones_statistics.calldate)
;
문제를, 당신은 아마 이미 볼 수있는 것은, 각 LIKE 기준을 좋아하지/위해, 나는 다른 기준을 가진 다른 쿼리를 작성해야한다는 것입니다, 나는 생각 이것은 곧 불쾌해질 것입니다 (현재 5 개의 쿼리가 있으며 결과를 반환하기 전에 총 20 초 동안 실행됩니다).
그래서 나는이 같은 사용자 정의 그룹 구성하여 트릭을 여러 쿼리를 방지 할 수있는 몇 가지 쉬운 방법이 없다, 궁금 :
SELECT
COUNT(phones_statistics.id) AS number_of_calls,
phones_statistics.calldate,
(something like a switch - 4 statements, 4 return values,
assigned to this field)
AS custom_field
...
rest of the query
...
GROUP BY custom_field,
YEAR(phones_statistics.calldate)
+ '-'
+ MONTH(phones_statistics.calldate)
+ '-'
+ DAY(phones_statistics.calldate)
감사를 사용하여이 작업을 수행 할 수있는 또 다른 방법을 찾았습니다. 나는 원래 년과 월을 택했고 나중에 날짜를 추가했다. (어제는'DATE' 함수를 기억하기에는 너무 졸 았던 것 같다.) 그러나 여전히 날짜가 문자열이 아니라 숫자로 주어졌다. 게다가 그것은 정확하게 작동해야하며 깔끔한 방법입니다. 고맙습니다 :) – NorthBridge