Table des matières
Définition de OVER
Syntaxe OVER
Utilisation de la fonction de fenêtrage OVER
Exemples d'utilisation de OVER dans les fonctions d'agrégation
La fonction de fenêtrage après SUM
COUNT
Exemples d'utilisation de OVER dans les fonctions de tri
ROW_NUMBER()
RANK()
DENSE_RANK() 
NTILE()
总结
Maison base de données SQL Comprendre la fonction de fenêtrage en SQL dans un article

Comprendre la fonction de fenêtrage en SQL dans un article

Sep 02, 2022 pm 04:55 PM
sql

Cet article vous apporte des connaissances pertinentes sur SQL server. Il existe deux types de fonctions de fenêtrage, également appelées fonctions analytiques, l'une est la fonction de fenêtrage d'agrégation et l'autre est la fonction de fenêtrage de tri. vous les informations pertinentes sur la fonction de fenêtrage dans SQL. L'article la présente en détail à travers un exemple de code. Les amis qui en ont besoin peuvent s'y référer.

Comprendre la fonction de fenêtrage en SQL dans un article

Etude recommandée : "Tutoriel SQL"

Définition de OVER

OVER est utilisé pour définir une fenêtre pour une ligne, qui opère sur un ensemble de valeurs Il n'est pas nécessaire d'utiliser la clause GROUP BY. pour regrouper les données. Possibilité de renvoyer à la fois les colonnes de la ligne de base et les colonnes agrégées dans la même ligne.

Syntaxe OVER

OVER ([colonne PARTITION BY] [colonne ORDER BY])

clause PARTITION BY pour le regroupement

clause ORDER BY pour le tri.

La fonction de fenêtre OVER() spécifie un ensemble de lignes et la fonction de fenêtrage calcule la valeur de chaque ligne dans l'ensemble de résultats de sortie de la fonction de fenêtre.

La fonction de fenêtrage peut regrouper les données sans utiliser GROUP BY, et peut également renvoyer les colonnes de la ligne de base et la colonne agrégée en même temps.

Utilisation de la fonction de fenêtrage OVER

OVER doit être utilisée avec la fonction d'agrégation ou la fonction de tri. La fonction d'agrégation fait généralement référence à des fonctions courantes telles que SUM(), MAX(), MIN, COUNT(), AVG(), etc. Les fonctions de tri font généralement référence à RANK(), ROW_NUMBER(), DENSE_RANK(), NTILE(), etc.

Exemples d'utilisation de OVER dans les fonctions d'agrégation

Nous utilisons les fonctions SUM et COUNT comme exemples pour vous le démontrer.

--建立测试表和测试数据
CREATE TABLE Employee
(
ID INT  PRIMARY KEY,
Name VARCHAR(20),
GroupName VARCHAR(20),
Salary INT
)
INSERT INTO  Employee
VALUES(1,'小明','开发部',8000),
      (4,'小张','开发部',7600),
      (5,'小白','开发部',7000),
      (8,'小王','财务部',5000),
      (9, null,'财务部',NULL),
      (15,'小刘','财务部',6000),
      (16,'小高','行政部',4500),
      (18,'小王','行政部',4000),
      (23,'小李','行政部',4500),
      (29,'小吴','行政部',4700);
Copier après la connexion

La fonction de fenêtrage après SUM

SELECT *,
     SUM(Salary) OVER(PARTITION BY Groupname) 每个组的总工资,
     SUM(Salary) OVER(PARTITION BY groupname ORDER BY ID) 每个组的累计总工资,
     SUM(Salary) OVER(ORDER BY ID) 累计工资,
     SUM(Salary) OVER() 总工资
from Employee
Copier après la connexion

(astuce : vous pouvez faire glisser le code vers la gauche et la droite)

Les résultats sont les suivants :

La signification de chaque fonction de fenêtrage est différente, expliquons-la en détail :

SUM (Salary) OVER (PARTITION BY Groupname)

Regroupez uniquement la colonne Groupname après PARTITION BY et résolvez la somme du salaire après le regroupement.

SUM(Salary) OVER (PARTITION BY Groupname ORDER BY ID)

Regroupez la colonne Groupname après PARTITION BY, puis triez par ID après ORDER BY, puis effectuez Salary au sein du groupe Traitement cumulatif.

SUM(Salary) OVER (ORDER BY ID)

Triez uniquement le contenu de l'ID après ORDER BY et accumulez le salaire trié.

SUM(Salary) OVER ()

La fonction de fenêtrage après résumé Salary

COUNT

SELECT *,
       COUNT(*) OVER(PARTITION BY Groupname ) 每个组的个数,
       COUNT(*) OVER(PARTITION BY Groupname ORDER BY ID) 每个组的累积个数,
       COUNT(*) OVER(ORDER BY ID) 累积个数 ,
       COUNT(*) OVER() 总个数
from Employee
Copier après la connexion

Le résultat renvoyé est le suivant :

Chaque fenêtrage suivant Les fonctions ne seront plus interprétés un par un. Vous pouvez les comparer un par un avec la fonction de fenêtrage après SUM ci-dessus.

Exemples d'utilisation de OVER dans les fonctions de tri

Nous démontrons les quatre fonctions de tri une par une

--先建立测试表和测试数据
WITH t AS
(SELECT 1 StuID,'一班' ClassName,70 Score
UNION ALL
SELECT 2,'一班',85
UNION ALL
SELECT 3,'一班',85
UNION ALL
SELECT 4,'二班',80
UNION ALL
SELECT 5,'二班',74
UNION ALL
SELECT 6,'二班',80
)
SELECT * INTO Scores FROM t;
SELECT * FROM Scores
Copier après la connexion

ROW_NUMBER()

Définition : La fonction de la fonction ROW_NUMBER() est de trier les données interrogées par SELECT Each Adding. un numéro de série associé à une donnée ne peut pas être utilisé pour classer les scores des étudiants. Il est généralement utilisé pour les requêtes de pagination, telles que l'interrogation des 10 meilleurs étudiants et l'interrogation de 10 à 100 étudiants. ROW_NUMBER() doit être utilisé avec ORDER BY, sinon une erreur sera signalée.

Trier les scores des élèves

SELECT *,
ROW_NUMBER() OVER (PARTITION BY ClassName ORDER BY SCORE DESC) 班内排序,
ROW_NUMBER() OVER (ORDER BY SCORE DESC) AS 总排序
FROM Scores;
Copier après la connexion

Les résultats sont les suivants :

Les fonctions de PARTITION BY et ORDER BY ici sont les mêmes que les fonctions d'agrégation que nous avons vues ci-dessus, et elles sont utilisées pour le regroupement et le tri.

De plus, la fonction ROW_NUMBER() peut également prendre des données dans un ordre spécifié.

SELECT * FROM (
SELECT *, ROW_NUMBER() OVER (ORDER BY SCORE DESC) AS 总排序
FROM Scores
) t WHERE t.总排序=2;
Copier après la connexion

Les résultats sont les suivants :

RANK()

Définition : La fonction RANK(), comme son nom l'indique, est une fonction de classement qui peut classer un certain champ. ROW_NUMBER() ? ROW_NUMBER() trie. Lorsqu'il y a des élèves avec les mêmes notes, ROW_NUMBER() les triera dans l'ordre. Leurs numéros de série sont différents, mais Rank() est différent. S’ils apparaissent identiques, leur classement est le même. Regardons l'exemple ci-dessous :

Exemple

SELECT ROW_NUMBER() OVER (ORDER BY SCORE DESC) AS [RANK],*
FROM Scores;
 
SELECT RANK() OVER (ORDER BY SCORE DESC) AS [RANK],*
FROM Scores;
Copier après la connexion

Résultat :

L'image du haut est le résultat de ROW_NUMBER(), et l'image du bas est le résultat de RANK(). Lorsque deux élèves ont les mêmes notes, il y a un changement. RANK() est 1-1-3-3-5-6, tandis que ROW_NUMBER() est toujours 1-2-3-4-5-6. C'est la différence entre RANK() et ROW_NUMBER().

DENSE_RANK()

定义:DENSE_RANK()函数也是排名函数,和RANK()功能相似,也是对字段进行排名,那它和RANK()到底有什么不同那?特别是对于有成绩相同的情况,DENSE_RANK()排名是连续的,RANK()是跳跃的排名,一般情况下用的排名函数就是RANK() 我们看例子:

示例

SELECT 
RANK() OVER (ORDER BY SCORE DESC) AS [RANK],*
FROM Scores;
 
SELECT 
DENSE_RANK() OVER (ORDER BY SCORE DESC) AS [RANK],*
FROM Scores;
Copier après la connexion

结果如下:

上面是RANK()的结果,下面是DENSE_RANK()的结果

NTILE()

定义:NTILE()函数是将有序分区中的行分发到指定数目的组中,各个组有编号,编号从1开始,就像我们说的'分区'一样 ,分为几个区,一个区会有多少个。

SELECT *,NTILE(1) OVER (ORDER BY SCORE DESC) AS 分区后排序 FROM Scores;
SELECT *,NTILE(2) OVER (ORDER BY SCORE DESC) AS 分区后排序 FROM Scores;
SELECT *,NTILE(3) OVER (ORDER BY SCORE DESC) AS 分区后排序 FROM Scores;
Copier après la connexion

结果如下:

就是将查询出来的记录根据NTILE函数里的参数进行平分分区。

总结

OVER开窗函数是我们工作中经常要使用到的,特别是在做数据分析计算的时候,经常要对数据进行分组排序。上面我们额外介绍了聚合函数和排序函数的与OVER结合的使用方法,此外还有很多与OVER一起使用的函数,比如LEAD函数,LAG函数,STRING_AGG函数等等都会使用到开窗函数OVER,其使用方法也要务必掌握。

推荐学习:《SQL教程

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quelle est la différence entre HQL et SQL dans le framework Hibernate ? Quelle est la différence entre HQL et SQL dans le framework Hibernate ? Apr 17, 2024 pm 02:57 PM

HQL et SQL sont comparés dans le framework Hibernate : HQL (1. Syntaxe orientée objet, 2. Requêtes indépendantes de la base de données, 3. Sécurité des types), tandis que SQL exploite directement la base de données (1. Normes indépendantes de la base de données, 2. Exécutable complexe requêtes et manipulation de données).

Utilisation de l'opération de division dans Oracle SQL Utilisation de l'opération de division dans Oracle SQL Mar 10, 2024 pm 03:06 PM

"Utilisation de l'opération de division dans OracleSQL" Dans OracleSQL, l'opération de division est l'une des opérations mathématiques courantes. Lors de l'interrogation et du traitement des données, les opérations de division peuvent nous aider à calculer le rapport entre les champs ou à dériver la relation logique entre des valeurs spécifiques. Cet article présentera l'utilisation de l'opération de division dans OracleSQL et fournira des exemples de code spécifiques. 1. Deux méthodes d'opérations de division dans OracleSQL Dans OracleSQL, les opérations de division peuvent être effectuées de deux manières différentes.

Comparaison et différences de syntaxe SQL entre Oracle et DB2 Comparaison et différences de syntaxe SQL entre Oracle et DB2 Mar 11, 2024 pm 12:09 PM

Oracle et DB2 sont deux systèmes de gestion de bases de données relationnelles couramment utilisés, chacun possédant sa propre syntaxe et ses propres caractéristiques SQL. Cet article comparera et différera la syntaxe SQL d'Oracle et de DB2, et fournira des exemples de code spécifiques. Connexion à la base de données Dans Oracle, utilisez l'instruction suivante pour vous connecter à la base de données : CONNECTusername/password@database Dans DB2, l'instruction pour vous connecter à la base de données est la suivante : CONNECTTOdataba.

Explication détaillée de la fonction Définir la balise dans les balises SQL dynamiques MyBatis Explication détaillée de la fonction Définir la balise dans les balises SQL dynamiques MyBatis Feb 26, 2024 pm 07:48 PM

Interprétation des balises SQL dynamiques MyBatis : explication détaillée de l'utilisation des balises Set MyBatis est un excellent cadre de couche de persistance. Il fournit une multitude de balises SQL dynamiques et peut construire de manière flexible des instructions d'opération de base de données. Parmi elles, la balise Set est utilisée pour générer la clause SET dans l'instruction UPDATE, qui est très couramment utilisée dans les opérations de mise à jour. Cet article expliquera en détail l'utilisation de la balise Set dans MyBatis et démontrera ses fonctionnalités à travers des exemples de code spécifiques. Qu'est-ce que Set tag Set tag est utilisé dans MyBati

Que signifie l'attribut d'identité dans SQL ? Que signifie l'attribut d'identité dans SQL ? Feb 19, 2024 am 11:24 AM

Qu'est-ce que l'identité en SQL ? Des exemples de code spécifiques sont nécessaires. En SQL, l'identité est un type de données spécial utilisé pour générer des nombres à incrémentation automatique. Il est souvent utilisé pour identifier de manière unique chaque ligne de données dans une table. La colonne Identité est souvent utilisée conjointement avec la colonne clé primaire pour garantir que chaque enregistrement possède un identifiant unique. Cet article détaillera comment utiliser Identity et quelques exemples de code pratiques. La manière de base d'utiliser Identity consiste à utiliser Identit lors de la création d'une table.

Comment implémenter Springboot+Mybatis-plus sans utiliser d'instructions SQL pour ajouter plusieurs tables Comment implémenter Springboot+Mybatis-plus sans utiliser d'instructions SQL pour ajouter plusieurs tables Jun 02, 2023 am 11:07 AM

Lorsque Springboot+Mybatis-plus n'utilise pas d'instructions SQL pour effectuer des opérations d'ajout de plusieurs tables, les problèmes que j'ai rencontrés sont décomposés en simulant la réflexion dans l'environnement de test : Créez un objet BrandDTO avec des paramètres pour simuler le passage des paramètres en arrière-plan. qu'il est extrêmement difficile d'effectuer des opérations multi-tables dans Mybatis-plus. Si vous n'utilisez pas d'outils tels que Mybatis-plus-join, vous pouvez uniquement configurer le fichier Mapper.xml correspondant et configurer le ResultMap malodorant et long, puis. écrivez l'instruction SQL correspondante Bien que cette méthode semble lourde, elle est très flexible et nous permet de

Comment résoudre l'erreur 5120 dans SQL Comment résoudre l'erreur 5120 dans SQL Mar 06, 2024 pm 04:33 PM

Solution : 1. Vérifiez si l'utilisateur connecté dispose des autorisations suffisantes pour accéder ou utiliser la base de données, et assurez-vous que l'utilisateur dispose des autorisations appropriées ; 2. Vérifiez si le compte du service SQL Server est autorisé à accéder au fichier spécifié ou ; dossier et assurez-vous que le compte dispose des autorisations suffisantes pour lire et écrire le fichier ou le dossier ; 3. Vérifiez si le fichier de base de données spécifié a été ouvert ou verrouillé par d'autres processus, essayez de fermer ou de libérer le fichier et réexécutez la requête ; . Essayez en tant qu'administrateur, exécutez Management Studio en tant que etc.

Comment utiliser les instructions SQL pour l'agrégation de données et les statistiques dans MySQL ? Comment utiliser les instructions SQL pour l'agrégation de données et les statistiques dans MySQL ? Dec 17, 2023 am 08:41 AM

Comment utiliser les instructions SQL pour l'agrégation de données et les statistiques dans MySQL ? L'agrégation des données et les statistiques sont des étapes très importantes lors de l'analyse des données et des statistiques. En tant que puissant système de gestion de bases de données relationnelles, MySQL fournit une multitude de fonctions d'agrégation et de statistiques, qui peuvent facilement effectuer des opérations d'agrégation de données et de statistiques. Cet article présentera la méthode d'utilisation des instructions SQL pour effectuer l'agrégation de données et les statistiques dans MySQL, et fournira des exemples de code spécifiques. 1. Utilisez la fonction COUNT pour compter. La fonction COUNT est la plus couramment utilisée.

See all articles