Cette section est choisie dans la "comparaison Excel, facile à comprendre l'analyse des données SQL", explique principalement 30 questions d'entrevue SQL dans l'interview d'analyse des données.
11 Lignes d'échange
Maintenant, nous avons une table Row_Col_Table, donc cette table est une ligne de données chaque mois:
select year_num ,sum(case when month_num = 1 then sales end) as m1 ,sum(case when month_num = 2 then sales end) as m2 ,sum(case when month_num = 3 then sales end) as m3 ,sum(case when month_num = 4 then sales end) as m4from demo.row_col_tablegroup by year_num
select col_1 ,col_2 ,col_3 ,(case when col_1 > col_2 then col_1 when col_2 > col_3 then col_3 else col_2 end) as all_resultfrom demo.col_table
Nous devons changer la voie aux données de stockage ci-dessus au-dessus de la Set de stockage horizontal indiqué dans le tableau ci-dessous:
] Je veux penser au code d'écriture, puis faire référence à mon code.
select (case when score < 60 then "60分以下" when score < 80 then "60-80分" when score < 100 then "80-100分" else "其他" end) as score_bin ,count(id) as stu_cntfrom demo.subject_tablegroup by (case when score < 60 then "60分以下" when score < 80 then "60-80分" when score < 100 then "80-100分" else "其他" end)
Nous souhaitons convertir des tables de données verticales en tables de données horizontales, d'abord dans toutes les données annuelles transformées en un an. Une ligne, peut être faite par le groupe suivant; Groupes par couramment utilisé avec les fonctions de polymère, mais ne sont pas toutes la synthèse de données, nous atteignons donc les données mensuelles spécifiées selon le cas.
12 Comparaison de plusieurs colonnes
Maintenant avec des colonnes COL_TABLES avec des données de colonne, nous devons créer la liste de résultats de la colonne finale selon ces trois colonnes, le résultat du résultat de la règle est: si le COL_1 est grand plus que COL_2 Les colonnes COL_1 sont sélectionnées si col_2 est plus grande que la colonne COL_3, si aucune colonne COL_2 n'est sélectionnée.
Table COL_TABLE Comme indiqué ci-dessous:
Je veux écrire le code avant, alors faites référence à mon code.
select curdate() ,count(order_id) as order_cntfrom demo.order_tablewhere weekofyear(order_date) = weekofyear(curdate()) and year(order_date) = year(curdate())
Comparaison de plusieurs de ces colonnes est en fait un processus de jugement multi-jugement et peut être effectué avec le cas lorsque, pour la première fois triste, le col_1 et Col_2. La relation est ensuite évaluée pour déterminer la relation entre COL_2 et COL_3. Ici, vous devez faire attention à l'ordre de mise en œuvre de chaque jugement, d'abord exécuter la première ligne lorsque, puis exécutez la deuxième ligne. L'opération finale est la suivante: 13 Emballez sur le point
Il existe actuellement une transcription d'un sujet de thème_table, cette table est stockée. Chaque identifiant SIClients, scores et autres informations, nous voulons connaître 60 points, 60 à 80 points, 80-100 points Bacó Combien d'élèves sont-ils obtenus dans la transcription?
La table thème est la suivante:
Je souhaite écrire le code avant, puis faire référence à mon code.
select count(order_id) as order_cnt ,count(if(date_sub(curdate(),interval 1 day) = order_date,order_id,null)) last_order_cntfrom demo.order_table
Maintenant, nous devons connaître le nombre d'étudiants dans chaque transcription, la première chose à faire est de diviser le segment de résultat, l'historique chaque fois, puis Le résultat du segment sera donné le secteur du segment dans le segment terminé, puis compter le nombre d'étudiants dans chaque segment. L'activité finale est la suivante:
Collecte de 14 semaines
Maintenant, nous avons des commandes ISP_TABLE DE COMMANDE, qui stocke Order_Id (ID de commande), Order_Date (Date de commande) et Autres commandes Informations connexes, nous devons maintenant recevoir la quantité de commande cette semaine cette semaine, l'accumulation de cette semaine a mentionné la journée de quelque chose de deuxPour récupérer des données, comme aujourd'hui, c'est mercredi, puis lundi. Entre mercredi. Que devrait-on faire?
Table de commande_dentifier comme suit:
Je souhaite d'abord écrire le code, puis faire référence à mon code.
Nous recevrons le nombre de commandes cette semaine, il suffit de filtrer les détails de la commande cette semaine, puis de définir l'identifiant de l'élément comptage ce que nous voulons. Pourquoi devrais-je filtrer l'ordre cette semaine? Les semaines hebdomadaires et les procédures pour exécuter des ordres sont une semaine et cinq sont la même année. Derrière cette situation doit faire attention, car le nombre de semaines sera répété dans des années différentes, mais elle n'est pas répétée la même année. Par exemple, il y a 52 semaines en 2019 et aura, mais cela n'apparaîtra pas deux 52 semaines depuis un an. L'activité finale est la suivante:
15 rounds périphériques par rapport à la collecte de données
Maintenant, nous devons maintenant obtenir la commande dans l'ordre dans Order_table; numéroLa bague est le nombre de commandes, ce qui signifie que les données d'hier.
select table1.*from demo.table1left join demo.table2 on table1.id = table2.idwhere table2.id is not null
Je souhaite écrire du code avant, alors faites référence à mon code.
Idée de solution:
La commande de ce nombre est préférable d'obtenir, principalement l'acquisition de données en boucle, lorsque la commande date de la journée de la journée, la journée de La journée est indemnisée, le nombre de commandes est hier. Il convient de noter ici que lorsque si la condition est malheureuse, le résultat est null et ne peut pas être différent, car le comptage (null) = 0 et compter () autre contenu n'est pas égal à 0. L'opération finale est la suivante:
16 Trouvez des camarades de classe primés
Il existe maintenant une table d'informations sur l'étudiant Tableau1, ce numéro d'enregistrement de table, le nom qui attend d'autres informations; Il existe une autre liste gagnante Tableau 2, enregistrée l'ID et le nom de la victoire de l'étudiant. Nous voulons maintenant plus d'informations sur la victoire de gagner un gagnant via Table1.
Tableau1 Le tableau 1 est le suivant:
Tableau 2Comme suit:
Je souhaite écrire du code avant, alors faites référence à mon code.
select (case when t3.day_value = 1 then "次日留存" when t3.day_value = 3 then "三日留存" when t3.day_value = 7 then "七日留存" else "其他" end) as type ,count(t3.uid) uid_cntfrom (select t1.uid ,t1.first_time ,t2.last_time ,datediff(t2.last_time,t1.first_time) day_value from (select uid ,date(min(login_time)) as first_time from demo.user_login group by uid)t1 left join (select uid ,date(max(login_time)) as last_time from demo.user_login group by uid)t2 on t1.uid = t2.uid)t3group by (case when t3.day_value = 1 then "次日留存" when t3.day_value = 3 then "三日留存" when t3.day_value = 7 then "七日留存" else "其他" end)
, nous devons obtenir toutes les informations des camarades de classe qui a gagné le prix, connaissez tous les élèves de table1, nous utilisons Table1 pour passer au reste Pour connecter le tableau 2, si vous avez la même classe, il sera trouvé dans le tableau 2 et il ne peut pas le trouver. Nous pouvons donc utiliser l'ID de Table2 pour évaluer si les camarades de classe ont des prix, puis les informations que nous voulons être criblées dans ces conditions. Les opérations finales sont les suivantes:
17 Calcul du boîtier de stockage de l'utilisateur
Il existe maintenant une table de connexion utilisateur User_Login, ce tableau enregistre chaque utilisateur chaque atterrissage, UID (utilisateur). Id) et login_time sont (heure de connexion). Nous voulons voir le nombre de dépôts le lendemain, le nombre de trois jours restants, la quantité de dépôt dans sept jours, aussi longtemps que les gensUtilisé a changé depuis la première fois, sera-t-il connecté, comment le faire?
La table user_login est la suivante:
Je souhaite écrire le code avant, puis désigner mon code.
select course ,count(id) as stu_numfrom demo.course_tablegroup by courseorder by count(id) desclimit 1
Conservé signifie que les utilisateurs qui se sont passés après la première connexion seront conservés et restants seront enregistrés après l'heure du temps, tels que Comme le troisième jour de l'utilisateur après la connexion sera connecté. Nous devons maintenant calculer le nombre de différents utilisateurs rentables. Premièrement, nous devons calculer le temps lent de différents utilisateurs et la dernière heure de connexion de l'utilisateur peut être utilisée pour vous connecter dans la première heure de connexion en tant que temps de rétention de l'utilisateur, puis à l'emballage à temps. Prenez juste le nombre d'utilisateurs que nous voulons. Les opérations finales sont les suivantes:
18 Dépistage le plus populaire
Il existe actuellement un cours de sujetStudent_Table_table, cette table enregistre chaque identifiant d'étudiant, nom (nom), classe (classe), cours (cours) et d'autres informations, nous souhaitons maintenant savoir quelles classes sont sélectionnées par les étudiants de choisir le nombre de personnes?
Tableau de Course_table comme suit:
Je souhaite écrire le code avant, puis désigner mon code.
select course ,count(id) as stu_numfrom demo.course_tablegroup by coursehaving count(id) = (select max(stu_num) from (select course ,count(id) as stu_num from demo.course_table group by course )a )
Nous recevrons les cours les plus sélectionnés, la première nécessité de participer à des cours, d'utiliser le groupe selon le groupe; Ensuite, le nombre de personnes du groupe compte, c'est-à-dire que le nombre de personnes choisissent le cours; Ensuite, réduisez le nombre de cours, utilisez la commande en fonction de; Enfin, les rangs sont filtrés, c'est-à-dire que nous souhaitons choisir le plus de personnes dans le nombre. Le résultat final est le suivant: Voulez-vous avoir un problème avec cette idée? S'il y a une différence entre deux parcours ou plus, quel est le résultat de cette idée? Évidemment inexacte. Pensez maintenant maintenant, s'il y a beaucoup de cours, que dois-je faire si je le faisNombre de personnes choisissent? Pensez à mes pensées en premier. Solution Idée: S'il existe de nombreux cours sélectionnés, nous devons dépasser tous les mêmes cours. Tout d'abord, nous devons encore obtenir chaque cours et le nombre de personnes sélectionnées et obtenez l'idée comme la première idée, et c'est aussi pour le cours, puis compte le nombre de personnes du groupe; exceptionnel. La première idée est qu'il n'y a qu'un seul cours sur le nombre de personnes par défaut et la deuxième idée est qu'il existe de nombreux cours avec le nombre de personnes le plus choisi, nous devons calculer le nombre de personnes choisies du nombre de personnes, et Utiliser des catégories d'enfants à créer; L'utilisation finale des résultats de l'équipe a été examinée pour obtenir les cours les plus sélectionnés. 19 Projection des trois cours les plus populaires de chaque classe ou du parcours avant_Table, nous voulons maintenant savoir combien de cours dans chaque classe choisis. Qu'est-ce que c'est à atteindre? Je veux écrire mAvant, alors faites référence à mon code. Résolution des idées: Il s'agit d'une acquisition typique de la question dans le groupe et l'un de nos problèmes précédents est le nombre de cours de candidats, vient de mettre chaque cours. Le nombre de candidats l'obtient, puis prenez le plus d'entre eux comme ce que nous voulons. Mais maintenant, ce problème est non seulement de tirer le meilleur parti, mais aussi d'être lundi, mardi. Et c'est toujours le premier, deuxième et troisième dans chaque classe. Pour ce problème, nous pouvons utiliser la fonction de fenêtre à faire, vous entrez le nombre de candidats à chaque cours, puis utilisez Row_Number () pour créer les résultats de tri de chaque cours dans chaque classe et enfin filtrer ce dont nous avons besoin en triant les résultats. Organiser. Le résultat final est le suivant: Bien sûr, nous pouvons filtrer tout classement de tout classement dans les conditions qui se produisent. Exemple: si vous voulez filtrer le cours xClassement 5-8, vous n'avez besoin que de B.Course_Rank entre 5 et 8 dans cette condition. 20 Recherche d'accumulation et Il existe désormais une lettre de consommation unique_order_able, Consumer_Ord_Table contenant commander_id (commandes), UID (ID utilisateur), Montant (coût de commande) Consumer Table_order_table comme suit: Je souhaite écrire le code précédent, puis faire référence à mon code. Idée de solutions: Nous devons recevoir 80% des commandes pour le moins d'utilisateurs, car nous n'avons qu'un seul élément d'horaire, nous avons donc besoin de lui pour devenir un- Ordre de côté, puis accumuler et accumuler et atteindre l'accumulation et les réalisations peuvent être utilisées par les fonctions de fenêtre. L'ordre accumulé peut obtenir la dimension de la taille humaine. Lors de la création d'une accumulation, il doit être trié dans l'ordre décroissant, afin de pouvoir obtenir le nombre minimum de personnes,Enfin, utilisez enfin une sous-requête, obtenez toutes les commandes, à l'aide des montants de la commande accumulée éliminera le montant total de la commande, vous pouvez obtenir le montant de la commande cumulatif. Enfin comme suit: