Comprendre la fonction de fenêtrage en SQL dans un article
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.
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);
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
(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
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
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;
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;
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;
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;
结果如下:
上面是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;
结果如下:
就是将查询出来的记录根据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!

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

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 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.

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.

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

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.

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

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 ? 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.
