Detailed explanation of count(), group by, order by in MySQL

Detailed explanation of count(), group by, order by in MySQL

I recently encountered a problem when doing IM, and used these three keywords at the same time. It is to query the offline message details of a person. The details returned by our server to the client include three contents. The first one requires to list which people or groups have sent you messages during the offline period. The second one is how many offline messages a certain person or group has sent. The third one is to display the latest one. Obviously, group by groups which people or groups have sent you offline messages, count() gets the number of offline messages, and order by time sorts to get the latest messages.

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;

Then, as expected, an error occurs when searching with group by and order by together. We can use nested subqueries.

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;

We can group and calculate the number of results that have already been sorted. There is a hidden pit here, which I accidentally avoided. In fact, count() will cause the order by sort to be invalid. For example:

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;

The statement finally obtains a record in which msg_data is actually not sorted at all, that is, the original order of the database. It should be the message that was inserted first, that is, the old message. To avoid this problem, the nested subquery is sorted first and then count() is used to avoid it. I dodged it unintentionally, but I discovered it after I modified the sentence and tested it again and again.

You may also be interested in:
  • Usage and performance optimization techniques of aggregate function count in MySQL
  • MySQL count detailed explanation and function example code
  • Detailed explanation of the usage of the COUNT function in MySQL
  • A brief discussion on MySQL count of rows
  • Summary of methods to improve mysql count
  • Detailed explanation of count without filter conditions in MySQL
  • Summary of the differences between count(*), count(1) and count(col) in MySQL
  • Comparison of usage of distinct and count(*) in MySQL
  • A convenient way to count the total number of rows in MYSQL query results without counting (*)
  • Explanation and usage of found_row() and row_count() in MySQL
  • Detailed explanation of the correct use of the count function in MySQL

<<:  WeChat applet to achieve the revolving lantern effect example

>>:  A complete example of Vue's multi-level jump (page drill-down) function for related pages

Recommend

jQuery manipulates cookies

Copy code The code is as follows: jQuery.cookie =...

React implements a highly adaptive virtual list

Table of contents Before transformation: After tr...

Detailed steps for IDEA to integrate docker to achieve remote deployment

1. Enable remote access to the docker server Log ...

js to achieve sliding carousel effect

This article shares the specific code of js to ac...

Data storage implementation method in WeChat applet

Table of contents Global variable globalData Page...

Detailed steps to use Redis in Docker

1. Introduction This article will show you how to...

LINUX Checks whether the port is occupied

I have never been able to figure out whether the ...

Specific use of Linux man command

01. Command Overview Linux provides a rich help m...

Implementation of adding remark information to mysql

Preface Some people have asked me some MySQL note...

Introduction to the usage of exists and except in SQL Server

Table of contents 1. exists 1.1 Description 1.2 E...

Three ways to refresh iframe

Copy code The code is as follows: <iframe src=...

How to use echarts to visualize components in Vue

echarts component official website address: https...

Linux command line quick tips: How to locate a file

We all have files stored on our computers -- dire...