> 데이터 베이스 > MySQL 튜토리얼 > mysql에서 count(), group by, order by 사용법을 공유하세요.

mysql에서 count(), group by, order by 사용법을 공유하세요.

小云云
풀어 주다: 2018-01-17 10:47:46
원래의
2477명이 탐색했습니다.

이 기사에서는 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;

이 명령문으로 얻은 마지막 레코드인 msg_data는 실제로 전혀 정렬되지 않은 결과입니다. 즉, 데이터베이스의 원래 순서입니다. 먼저 삽입된 메시지는 오래된 뉴스입니다. 이 문제를 피하기 위해 중첩된 하위 쿼리를 여기에서 먼저 정렬한 다음 count()를 사용하여 이를 방지합니다. 본의 아니게 탈출했는데, 문장을 바꾸고 테스트를 거듭하다 보니 운 좋게 알게 됐어요.

관련 권장사항:

count()에 대한 10개 기사 권장

🎜🎜🎜 Group By를 사용하여 MySql에서 여러 필드를 그룹화하는 방법 🎜🎜🎜🎜MySQL의 Order By 다중 필드 정렬 규칙에 대한 자세한 설명 🎜🎜

위 내용은 mysql에서 count(), group by, order by 사용법을 공유하세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿