이 기사에서는 mysql에서 count(), group by, order by를 사용하는 방법을 주로 설명합니다. mysql의 order by는 정렬 쿼리, asc 오름차순, desc 내림차순 쿼리이며 그룹에서만 사용할 수 있습니다. by 절 및 act on 그룹 내에서 have 조건절 바로 뒤에 함수 표현식이 올 수 있습니다. group by 절을 사용하는 쿼리 문에는 집계 함수를 사용해야 합니다.
최근 IM을 하다가 문제가 생겼는데, 이 세 가지 키워드가 동시에 사용됐어요. 개인의 오프라인 메시지 세부 정보를 쿼리하는 것입니다. 서버에서 클라이언트로 반환하는 세부 정보에는 세 가지 내용이 포함됩니다. 첫 번째는 오프라인 기간 동안 어떤 사람이나 그룹이 메시지를 보냈는지 나열해야 합니다. 특정 개인이나 그룹이 오프라인 메시지를 보냈는데, 세 번째는 가장 최근 메시지를 꺼내서 표시하는 것입니다. 분명히 오프라인 메시지를 보낸 사람이나 그룹을 그룹별로 그룹화하고, count()는 오프라인 메시지 수를 가져오고, 시간별로 정렬하여 최신 메시지를 정렬합니다.
cnt로 count(1) 선택, t_im_chat_offline_msg에서 msg_data, 여기서 to_company_id = ? 및 to_user_id = ? order by create_time desc group by from_company_id, from_user_id;
select count(1) as cnt, msg_data from t_im_chat_offline_msg where to_company_id = ? and to_user_id = ? order by create_time desc group by from_company_id, from_user_id;
然后果不其然group by和order by一起检索就报错了,我们可以用嵌套子查询。
select count(1) as cnt, msg_data from (select * from t_im_chat_offline_msg where to_company_id = ? and to_user_id = ? order by create_time desc) as temp_table group by from_company_id, from_user_id;<br>
我们可以对已经排序的结果集,再来分组并计算数量。这里还有一个暗坑,我自己不小心给躲过去了,其实count()会造成order by排序无效,举个例子:
select count(1) as cnt, msg_data from t_im_chat_offline_msg where to_company_id = ? and to_user_id = ? order by create_time desc;
count(1)를 cnt로 선택, msg_data from(t_im_chat_offline_msg에서 * 선택, to_company_id = ? 및 to_user_id = ? create_time desc로 주문) temp_table 그룹 by from_company_id, from_user_id;<p></p>
할 수 있습니다. 정렬된 결과 집합을 그룹화하고 수량을 계산합니다. 여기에는 실수로 피한 또 다른 숨겨진 구덩이가 있습니다. 실제로 count()를 사용하면 정렬에 의한 순서가 유효하지 않게 됩니다. 예: count(1)를 cnt로 선택하고, msg_data from t_im_chat_offline_msg and to_user_id = ? order by create_time desc;
위 내용은 mysql에서 count(), group by, order by 사용법을 공유하세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!