Skip to main content

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:

Le résultat obtenu par coïncidence directe est tous les magasins pendant cette période. Toutes les ventes, les résultats obtenus par coïncidence 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 la 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, Partitions selon les clauses

Imaginez, ci-dessus, nous vendons chaque magasin de ventes quotidien et que tout magasin vendant du flacon central de toutes les dates comparé, nSi nous voulons maintenant faire toutes les ventes quotidiennes de chaque magasin avec la moyenne des numéros de jour, ce qui atteint? La réponse consiste à utiliser les partitions en fonction des partitions et des groupes en fonction de la même chose, qui est de collecter la collecte, doit être utilisé avec ().
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:


Quatre, ordre selon la commande
triée par la valeur de la colonne, Principalement combiné à la fonction de séquence suivante et est synthétisé séquentiellement lorsqu'il est utilisé dans l'ordre utilisé 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:

lorsque la commande est utilisée. Avec la fonction de séquence, il est utilisé pour trier.
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, alors nous pouvons choisir dans CHCe. Les données que nous voulons réagiront.

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

5.1 Néle

La fonction ntile est principalement utilisée pour couper toutes les données. La valeur par défaut est un groupe de tuiles avant d'effectuer des opérations. Par exemple, l'ensemble de la table contient 9 lignes de données. Vous devez couper en 3 groupes, puis le groupe de comportement 1-3, 4-6 comportement, 7-9 comportement. Nous avons réduit les ventes en 3 groupes, le code suivant:
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é par), comme suit: Le résultat final est le suivant: 5.2 Row_Number Row_Number () commence à partir de 1, selonCommande (REMARQUE Voici l'ordre sans commande) Créez la chaîne correspondante de la chaîne correspondante dans la valeur de l'emballage, Row_Number (), il n'y a pas de répétition et lorsque la valeur du tri est le même tri dans l'ordre enregistré dans la table. Parce que Row_Number () est créé dans la commande, au lieu de créer des séquences, low_number () doit souvent être utilisé avec la commande. 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. Lag and Lead La signification anglaise de la gamme est la latence, tandis que l'anglais du plomb dépasse. Le délai correspondant se déplace en arrière, tandis que la position conduit à pHuía avant. 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? Le code peut être utilisé comme suit: Le résultat final est le suivant: 5.4 First_Value et Last_Value First_Value et Last_Value est le nom Asididi, qui correspond à 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, code comme suit: KLe résultat final est le suivant:

Sujets

Catégories