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

Implementation methods of common CSS3 animations

1. What is CSS Animations is a proposed module fo...

Several common methods of CSS equal height layout

Equal height layout Refers to the layout of child...

How many ports can a Linux server open at most?

Table of contents Port-related concepts: Relation...

JavaScript implements displaying a drop-down box when the mouse passes over it

This article shares the specific code of JavaScri...

Will the deprecated Docker be replaced by Podman?

The Kubernetes team recently announced that it wi...

Detailed explanation of CSS multiple three-column adaptive layout implementation

Preface In order to follow the conventional WEB l...

How to modify the default storage location of Docker images (solution)

Due to the initial partitioning of the system, th...

The front-end must know how to lazy load images (three methods)

Table of contents 1. What is lazy loading? 2. Imp...

Summary of how JS operates on pages inside and outside Iframe

Table of contents Get the content of the iframe o...

MySQL database deletes duplicate data and only retains one method instance

1. Problem introduction Assume a scenario where a...

How to view and optimize MySql indexes

MySQL supports hash and btree indexes. InnoDB and...

Detailed explanation of how to configure openGauss database in docker

For Windows User Using openGauss in Docker Pull t...

A simple example of MySQL joint table query

MySql uses joined table queries, which may be dif...