teneur
Thème 2 : Clients avec le plus de commandes
avant-propos
- Revoir les faits saillants précédents
Pratique quotidienne de la base de LeetCode (1)données 2 )
Thème 1 : Analyse du gameplay
- Exigences de la question : obtenir la date de la première connexion de chaque joueur à la plateforme
- Idée de traitement : la date de connexion à la plate-forme pour la première fois s'est avérée être la date de connexion à la plate-forme pour la première fois, qui est la plus petite event_date dans le player_id correspondant, donc l'idée est sortie, et vous peut interroger directement min(date) avec une requête agrégée.
- Comment penser à utiliser une requête agrégée, il y a d'abord plusieurs dates de connexion, mais nous n'avons besoin que de la plus petite, nous avons donc pensé à compresser via une requête agrégée, qui peut être utilisée en combinaison avec des fonctions agrégées.Les fonctions agrégées couramment utilisées sont attachées comme suit
select
player_id,
min(event_date) as 'first_login'
from
activity
group by
player_id;
Thème 2 : Clients avec le plus de commandes
586. Clients avec le plus de commandes
- Exigence de titre : obtenir le client avec le plus de commandes
- Sens de réflexion : nous devons obtenir le client avec le plus grand nombre de commandes. La première étape consiste à calculer le nombre de commandes. Pour calculer le nombre de commandes, nous devons agréger la requête, compter (numéro_client) ou compter (*) pour obtenir le nombre de commandes, puis directement en fonction du nombre de commandes de Trier du plus grand au plus petit. Le premier élément est le nombre de commandes max requises par les clients (pour obtenir le plus grand, lequel est le plus important et lequel est le plus petit , il faut penser trier + limiter la pagination)
select
customer_number
from
orders
group by customer_number
order by count(*) desc
limit 0, 1; # 获取第一条记录
Thème 3 : Grands pays
- Exigences relatives au titre : nous devons filtrer les principaux pays selon les règles suivantes
- Idées de résolution de problèmes : C'est très simple, et cela peut être réalisé en interrogeant directement une condition où pour filtrer les grands pays.
select
name, population, area
from
world
where
area >= 3000000 or population >= 25000000;
-- where 条件筛选大国
Sujet 4 : Numéros consécutifs
- Exigences relatives à l'objet : 1. Se produit en continu 2. Se produit trois fois
- Parce que nous devons rechercher à partir de la même table, il n'y a qu'une seule table, et la relation est le nombre d'enregistrements répétés qui apparaissent trois fois de suite dans la table, il est donc facile de penser que nous pouvons interroger via l'auto-jointure. Ensuite, il y aura certainement des répétitions dans le processus de requête, car il équivaut à la même La table est connectée deux fois à elle-même. Par conséquent, une opération distincte doit être effectuée
select distinct
l1.num as 'ConsecutiveNums' -- 'consecutivenums'题目要求别名
from
logs l1 inner join logs l2 on l1.num = l2.num
inner join logs l3 on l1.num = l3.num
# 子连接关系条件满足同一个num
where
l1.id = l2.id + 1 && l2.id = l3.id + 1;
-- where条件保证连续记录
Résumé du sujet
- Pour trouver le nombre d'enregistrements répétés, nous devons penser aux requêtes d'agrégation, car les requêtes d'agrégation peuvent compresser la même opération d'agrégation de mots clés.
- Pour trouver le plus grand ou le plus petit enregistrement, nous devons penser que nous pouvons utiliser sort + limit pagination
- L'opération de jointure multi-tables n'est pas limitée au nombre de tables, et même trois tables et quatre tables peuvent être connectées en même temps, mais il n'est généralement pas recommandé d'écrire de cette manière après que le nombre est trop grand, et vous besoin de trouver un autre moyen, parce que vous ne pouvez pas l'écrire