


Explication détaillée des fonctions de fenêtre SQL : utilisation des fonctions de fenêtre de classement
Cet article vous apporte des connaissances pertinentes sur SQL server, qui présente principalement les contraintes de clé primaire de SQL Server (PRIMARY KEY). La clé primaire est une colonne ou un groupe de colonnes qui identifie de manière unique chaque ligne du tableau. le thème. Jetons un coup d’œil aux détails ci-dessous, j’espère que cela sera utile à tout le monde.
Étude recommandée : "Tutoriel SQL"
Pour les bases des fonctions de fenêtre, veuillez consulter l'article Fonctions de fenêtre SQL
Les fonctions de fenêtre de valeur peuvent être utilisées pour renvoyer des lignes de données à des positions spécifiées dans la fenêtre. Les fonctions courantes de la fenêtre de valeurs sont les suivantes :
La fonction LAG peut renvoyer la Nième ligne de données avant la ligne actuelle dans la fenêtre. La fonction LEAD peut renvoyer la Nième ligne de données après la ligne actuelle dans la fenêtre. La fonction FIRST_VALUE peut renvoyer la première ligne de données dans la fenêtre. La fonction LAST_VALUE peut renvoyer la dernière ligne de données de la fenêtre. La fonction NTH_VALUE peut renvoyer la Nième ligne de données dans la fenêtre.
Parmi elles, la fonction LAG et la fonction LEAD ne prennent pas en charge les tailles de fenêtre dynamiques. Elles utilisent la partition entière comme fenêtre d'analyse.
Analyse de cas
Exemple de table utilisée dans le cas
La requête suivante utilisera une table. La table sales_monthly stocke les informations sur les ventes du produit, product représente le nom du produit, ym représente l'année et le mois, et montant représente le montant des ventes ( yuans) .
Voici quelques données du tableau :
Le script d'initialisation de ce tableau peut être obtenu en bas de l'article.
1. Analyse périodique
La croissance mensuelle fait référence à la croissance des données de la période en cours par rapport aux données de la période précédente. Par exemple, l'augmentation des ventes du produit en juin 2019 par rapport aux ventes. en mai 2019.
L'instruction suivante compte le taux de croissance mensuel de divers produits :
SELECT s.product AS "产品", s.ym AS "年月", s.amount AS "销售额", ( (s.amount - LAG(s.amount,1) OVER (PARTITION BY product ORDER BY s.ym))/ LAG(s.amount,1) OVER (PARTITION BY product ORDER BY s.ym) ) * 100 AS "环比增长率(%)" FROM sales_monthly s ORDER BY s.product,s.ym
Parmi eux, LAG (montant, 1) signifie obtenir le volume des ventes de la période précédente, l'option PARTITION BY signifie partitionner par produit , et l'option ORDER BY signifie partitionner par produit, trier par mois.
Le montant des ventes du mois en cours moins le montant des ventes de la période précédente, puis divisé par le montant des ventes de la période précédente, correspond au taux de croissance d'un mois à l'autre.
La requête renvoie les résultats suivants :
Janvier 2018 est la première période, son taux de croissance mensuel est donc vide.
Le taux de croissance mensuelle d'« Orange » en février 2018 était d'environ 0,2856 % ((10183-10154)/10154×100), et ainsi de suite.
2. Analyse d'une année sur l'autre
La croissance d'une année sur l'autre fait référence à la croissance des données de la période actuelle par rapport à l'année précédente ou à la même période de l'histoire. Par exemple, les ventes d'un produit en juin 2019. augmenté par rapport aux ventes de juin 2018. partie.
Le relevé suivant compte le taux de croissance d'une année sur l'autre de divers produits chaque mois :
SELECT s.product AS "产品", s.ym AS "年月", s.amount AS "销售额", ( (s.amount - LAG(s.amount,12) OVER (PARTITION BY product ORDER BY s.ym))/ LAG(s.amount,12) OVER (PARTITION BY product ORDER BY s.ym) ) * 100 AS "同比增长率(%)" FROM sales_monthly s ORDER BY s.product,s.ym
Parmi eux, LAG (montant, 12) représente le volume des ventes de la 12ème période avant le mois en cours, qui est le volume des ventes du même mois l'année dernière.
L'option PARTITION BY signifie un partitionnement par produit, l'option ORDER BY signifie un tri par mois.
Le montant des ventes du mois en cours moins les ventes de la même période de l'année dernière, puis divisé par les ventes de la même période de l'année dernière, correspond au taux de croissance d'une année sur l'autre.
Les résultats renvoyés par cette requête sont les suivants :
Il n'y a pas de taux de croissance annuel correspondant pour les 12 périodes de données en 2018. Le taux de croissance annuel de "Orange" en Janvier 2019 était d'environ 9,3067 % ((11099-10154)/ 10154×100), et ainsi de suite.
Conseils : La fonction LEAD est similaire à la fonction LAG, mais son résultat renvoyé est la Nième ligne de données après la ligne actuelle.
3. Taux de croissance composé
Le taux de croissance composé est le résultat de la division des données de la Nième période par les données de base de la première période, puis de leur augmentation à la puissance N-1 et de la soustraction de 1.
Supposons que les ventes de produits en 2018 soient de 10 000, les ventes de produits en 2019 soient de 12 500 et les ventes de produits en 2020 soient de 15 000. Ensuite, le taux de croissance composé de ces deux années est calculé comme suit :
Le taux de croissance composé calculé sur une base annuelle est appelé Taux de croissance composé annuel moyen, et le taux de croissance composé calculé sur une base mensuelle est appelé Taux de croissance composé mensuel moyen.
La requête suivante compte le taux de croissance composé des ventes mensuelles moyennes de différents produits depuis janvier 2018 :
WITH s (product,ym,amount,first_amount,num) AS ( SELECT m.product, m.ym, m.amount, FIRST_VALUE(m.amount) OVER (PARTITION BY m.product ORDER BY m.ym), ROW_NUMBER() OVER (PARTITION BY m.product ORDER BY m.ym) FROM sales_monthly m ) SELECT product AS "产品", ym AS "年月",amount AS "销售额", (POWER( amount/first_amount, 1.0/NULLIF(num-1,0)) -1)*100 AS "月均复合增长率(%)" FROM s ORDER BY product, ym
Définit d'abord une expression de tableau générale, dans laquelle FIRST_VALUE(amount) renvoie les ventes de la première période (201801). Eh bien, le ROW_NUMBER La fonction renvoie le numéro de chaque période.
La fonction POWER dans la requête principale est utilisée pour effectuer l'opération racine carrée, la fonction NULLIF est utilisée pour gérer l'erreur de division par zéro de la première période de données et la constante 1.0 est utilisée pour éviter la perte de précision causée par la division entière.
Les résultats renvoyés par cette requête sont les suivants :
Janvier 2018 est la première période, donc le taux de croissance composé des ventes mensuelles moyennes de son produit est vide.
“桔子”2018年2月的月均销售额复合增长率等于它的环比增长率,2018年3月的月均销售额复合增长率等于0.4471%,依此类推。
4.不同产品最高和最低销售额
以下语句统计了不同产品最低销售额、最高销售额以及第三高销售额所在的月份:
SELECT product AS "产品", ym AS "年月",amount AS "销售额", FIRST_VALUE(m.ym) OVER ( PARTITION BY m.product ORDER BY m.amount DESC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) AS "最高销售额月份", LAST_VALUE(m.ym) OVER ( PARTITION BY m.product ORDER BY m.amount DESC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) AS "最低销售额月份", NTH_VALUE(m.ym,3) OVER ( PARTITION BY m.product ORDER BY m.amount DESC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) AS "第三高销售额月份" FROM sales_monthly m ORDER BY product, ym;
三个窗口函数的OVER子句相同,PARTITION BY选项表示按照产品进行分区,ORDER BY选项表示按照销售额从高到低排序。
以上三个函数的默认窗口都是从分区的第一行到当前行,因此我们将窗口扩展到了整个分区。
该查询返回的结果如下:
“桔子”的最高销售额出现在2019年6月,最低销售额出现在2018年1月,第三高销售额出现在2019年4月。
示例表和脚本
-- 创建销量表sales_monthly -- product表示产品名称,ym表示年月,amount表示销售金额(元) CREATE TABLE sales_monthly(product VARCHAR(20), ym VARCHAR(10), amount NUMERIC(10, 2)); -- 生成测试数据 INSERT INTO sales_monthly (product,ym,amount) VALUES ('苹果','201801',10159.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('苹果','201802',10211.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('苹果','201803',10247.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('苹果','201804',10376.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('苹果','201805',10400.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('苹果','201806',10565.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('苹果','201807',10613.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('苹果','201808',10696.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('苹果','201809',10751.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('苹果','201810',10842.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('苹果','201811',10900.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('苹果','201812',10972.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('苹果','201901',11155.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('苹果','201902',11202.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('苹果','201903',11260.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('苹果','201904',11341.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('苹果','201905',11459.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('苹果','201906',11560.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('香蕉','201801',10138.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('香蕉','201802',10194.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('香蕉','201803',10328.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('香蕉','201804',10322.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('香蕉','201805',10481.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('香蕉','201806',10502.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('香蕉','201807',10589.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('香蕉','201808',10681.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('香蕉','201809',10798.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('香蕉','201810',10829.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('香蕉','201811',10913.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('香蕉','201812',11056.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('香蕉','201901',11161.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('香蕉','201902',11173.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('香蕉','201903',11288.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('香蕉','201904',11408.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('香蕉','201905',11469.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('香蕉','201906',11528.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('桔子','201801',10154.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('桔子','201802',10183.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('桔子','201803',10245.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('桔子','201804',10325.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('桔子','201805',10465.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('桔子','201806',10505.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('桔子','201807',10578.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('桔子','201808',10680.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('桔子','201809',10788.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('桔子','201810',10838.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('桔子','201811',10942.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('桔子','201812',10988.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('桔子','201901',11099.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('桔子','201902',11181.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('桔子','201903',11302.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('桔子','201904',11327.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('桔子','201905',11423.00); INSERT INTO sales_monthly (product,ym,amount) VALUES ('桔子','201906',11524.00);
推荐学习:《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

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.

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.
