1. Quelle est la fonction de fenêtre
nous savons tous que la fonction synthétique en SQL, la fonction de polymère est la signification de la collecte consolidée, une coïncidence avec la coïncidence une plage de valeurs et le résultat est une après la synthèse. Valeur ou valeur correspondant à chaque catégorie. Comme indiqué ci-dessous:
Les résultats obtenus par coïncidence directe sont tous des magasins dans tous les magasins. Au total, les résultats du groupe sont la somme des ventes de chaque magasin pendant cette période.
Le nombre de flux de données obtenus dans cette coïncidence est inférieur au nombre de lignes de données de base, mais nous avons souvent une telle demande, c'est-à-dire que j'espère que des données de base sont également espérées. Pour afficher les données synthétiques, cette fois, la fonction synthétique n'est pas satisfaite, la fonction de fenêtre sera utilisée. La fonction de fenêtre peut afficher les données originales originales ou les données synthétiques. Peut-être que vous ne comprenez toujours pas, peu importe, je viens de commencer à ne pas comprendre,Nous voyons quelques applications spécifiques sur les fonctions de fenêtre.
Deuxièmement, la fonction de coïncidence + plus ()
Il y a maintenant une table T stockée quotidienne de chaque magasin:
shopname sales date A 1 2018/4/1 B 3 2018/4/1 C 5 2018/4/1 A 7 2018/4/2 B 9 2018/4/2 C 2 2018/4/2 A 4 2018/4/3 B 6 2018/4/3 C 8 2018/4/3
select shopname ,sales ,date ,avg(sales) over()from t
shopname sales date avg_window_0A 1 2018/4/1 5B 3 2018/4/1 5C 5 2018/4/1 5A 7 2018/4/2 5B 9 2018/4/2 5C 2 2018/4/2 5A 4 2018/4/3 5B 6 2018/4/3 5C 8 2018/4/3 5
select shopname ,sales ,date ,avg(sales) over(partition by shopname)from t
shopname sales date avg_window_0A 1 2018/4/1 4B 3 2018/4/1 6C 5 2018/4/1 5A 7 2018/4/2 4B 9 2018/4/2 6C 2 2018/4/2 5A 4 2018/4/3 4B 6 2018/4/3 6C 8 2018/4/3 5
select shopname ,sales ,date ,sum(sales) over(partition by shopname order by date)from t
shopname sales date sum_window_0A 1 2018/4/1 1A 7 2018/4/2 8A 4 2018/4/3 12B 3 2018/4/1 3B 9 2018/4/2 12B 6 2018/4/3 18C 5 2018/4/1 5C 2 2018/4/2 7C 8 2018/4/3 15
select shopname ,date ,sales ,ntile(3) over()from t
shopname sales date ntile_window_0A 1 2018/4/1 1B 3 2018/4/1 1C 5 2018/4/1 1A 7 2018/4/2 2B 9 2018/4/2 2C 2 2018/4/2 2A 4 2018/4/3 3B 6 2018/4/3 3C 8 2018/4/3 3
select shopname ,date ,sales ,ntile(3) over(partition by shopname order by sales)from t
.
shopname sales date ntile_window_0A 1 2018/4/1 1A 4 2018/4/3 2A 7 2018/4/2 3B 3 2018/4/1 1B 6 2018/4/3 2B 9 2018/4/2 3C 2 2018/4/2 1C 5 2018/4/1 2C 8 2018/4/3 3
Que devrions-nous faire si nous voulons envisager la Journée des biens de vente de chaque magasin et la moyenne de tous les magasins dans tous les magasins? La réponse est effectuée avec une fonction de fenêtre. Juste au-delà du code de la requête de base, vous devez également ajouter () dans le champ que vous souhaitez synthétiser, comme suit:
select shopname ,date ,sales ,row_number() over(partition by shopname order by date)from t
Le résultat final est comme suit: ] Mardi, cloisons selon les clauses
shopname sales date row_number_window_0A 1 2018/4/1 1A 7 2018/4/2 2A 4 2018/4/3 3B 3 2018/4/1 1B 9 2018/4/2 2B 6 2018/4/3 3C 5 2018/4/1 1C 2 2018/4/2 2C 8 2018/4/3 3
Le résultat final est le suivant
Commande par agencée selon Une certaine colonne, principalement combinée à la fonction de séquence suivante et synthétisée en continu lorsque la commande est utilisée avec une coïncidence. Quel est l'agrégat de commande? Par exemple: donner aux gens un exemple d'utilisation de la commande, similaire à l'accumulation et aux effets, code spécifique comme suit:
Les résultats de l'opération finale sont les suivants:
select shopname ,date ,sales ,lag(date,1) over(partition by shopname order by date)from t
Quelle est la fonction de séquence, ce qui signifie que les données peuvent être agencées dans une séquence de commande, nous pouvons alors choisir dans cette chaîne. Données que nous avonsVouloir répondre.
shopname sales date lag_window_0A 1 2018/4/1 NULLA 7 2018/4/2 2018/4/1A 4 2018/4/3 2018/4/2B 3 2018/4/1 NULLB 9 2018/4/2 2018/4/1B 6 2018/4/3 2018/4/2C 5 2018/4/1 NULLC 2 2018/4/2 2018/4/1C 8 2018/4/3 2018/4/2
1, NTILE
select shopname ,date ,sales ,lead(date,1) over(partition by shopname order by date)from t
Le résultat final est le suivant:
ci-dessus est des ventes coupées. Volume en 3 groupes, mais il n'y a pas de rôle réel dans nos applications pratiques. Que pensez-vous, quoi utiliser le tableau? Si nous utilisons la commande en l'utilisant, d'abord, il est très utile dans l'ordre croissant en ventes, puis créez un groupe de tranche, cette fois a du sens. Il est également possible de glisser dans un paquet (partitionné), comme suit: Le résultat final est le suivant: 2, Row_Number Row_Number () commence à partir de 1, dans l'ordre (notez que l'applicationLes aviations sont organisées), créant le numéro de séquence correspondant dans l'emballage, la valeur Row_Number () n'a aucune répétition, lorsque la valeur du tri est identique, l'agencement est trié dans l'ordre indiqué dans le tableau. Parce que Row_Number () a été créé dans l'ordre, au lieu de créer des chaînes dans l'ordre, Row_Number () devrait souvent avoir besoin d'être en ordre. Vous voulez le voir maintenant, pendant une période de temps, chaque vente de magasin correspondant à la journée? Que devrais-je voir? À ce stade, vous pouvez utiliser Row_Number () dans l'ordre, le code suivant: Parce que nous verrons la date la plus ancienne de chaque magasin, la date est organisée sur le trône. Le résultat final est le suivant: Nous devons simplement obtenir la section NUM = 1 à la suite de ce que nous voulons. 3, la traîne et le plomb La latence signifie la latence et la signification anglaise de plomb est supérieure. Le retard correspondant se déplace en arrière, tandis que la position mène vers TRsouhaiter. Vous ne pouvez pas comprendre, peu importe, vous pouvez voir l'exemple en direct. Vous voulez maintenant regarder chaque magasin cette fois et le dernier jour est pauvre, que devriez-vous voir? Vous pouvez utiliser la latence, le code comme suit: Le résultat final est le suivant: Vous voulez maintenant regarder chaque magasin Et le temps entre le lendemain, que devriez-vous voir? Vous pouvez utiliser la position leader, le code est comme suit: Le résultat final est le suivant: 4, first_value et last_value First_Value et Last_Value sont Asidi, qui consiste à avoir la première valeur et la valeur finale. Cependant, ce n'est pas vrai pour la première ou la finale, qui en est dans l'une des première ou dernière rangée de la ligne actuelle. Maintenant que vous voulez voir le premier jour et le dernier jour de chaque magasin, que pensez-vous? Vous pouvez utiliser directement First_Value et Last_Value, le code suivant: La dernière, elle est la suivante: