La position actuelle:Accueil du site>Distribution des données via SQL
Distribution des données via SQL
2022-07-23 00:01:16【Excellent comme un germe de haricot】
Contexte opérationnel:J'ai rencontré un besoin au travail,Il y a une montre de magasin、Et une table d'utilisateurs.Besoin de distribuer la part des ventes des utilisateurs dans les magasins aux différents magasins.C'est pourquoi cet article
Idées:.Sur la base des ventes par magasin et du total de tous les magasins,Trouver la part des ventes par magasin.Selon la part des ventes、Distribuer 10 000 clients aux magasins
Voici des exemples de données::
## Liste des magasins
CREATE TABLE `store_mapping` (
`store_id` varchar(255) NOT NULL COMMENT 'Code du magasin',
`amt_rate` varchar(255) DEFAULT NULL COMMENT 'Part des ventes',
PRIMARY KEY (`store_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
## Tableau des utilisateurs
CREATE TABLE `consumer` (
`user_id` varchar(255) NOT NULL COMMENT 'Code utilisateur',
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
## Tableau final de stockage des données
CREATE TABLE `distribute_over` (
`user_id` int NOT NULL COMMENT 'Code utilisateur',
`store_id` int DEFAULT NULL COMMENT 'Code du magasin',
`rn` varchar(255) DEFAULT NULL COMMENT 'rankValeur',
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
insert into store_mapping values ("1001","0.05");
insert into store_mapping values ("1002","0.35");
insert into store_mapping values ("1003","0.2");
insert into store_mapping values ("1004","0.07");
insert into store_mapping values ("1005","0.33");
insert into consumer
SELECT
1000000+rn1
FROM
( SELECT row_number () over () rn1 FROM car ## Cette montre est prise au hasard , Vous pouvez en prendre une plus grande que 10000Tableau des données
) a
LIMIT 10000;
follow me、follow me
1. Nombre de personnes à distribuer dans chaque magasin
SELECT
store_id,
round( amt_rate * user_cnt, 0 ) AS " Nombre de personnes à distribuer dans chaque magasin "
FROM
store_mapping,
( SELECT count( user_id ) AS user_cnt FROM consumer ) u
2. Calculé sur la base du nombre total de personnes à distribuer dans chaque magasin (S'il te plaît.rankValeur)
SELECT
sdd_2.store_id,
sum( sdd_1.store_distribute_people )+ 1
FROM
(
SELECT
store_id,
round( amt_rate * user_cnt, 0 ) AS store_distribute_people
FROM
store_mapping,
( SELECT count( user_id ) AS user_cnt FROM consumer ) u
) sdd_1,##store_distribute_detail_1,
(
SELECT
store_id,
round( amt_rate * user_cnt, 0 ) AS store_distribute_people
FROM
store_mapping,
( SELECT count( user_id ) AS user_cnt FROM consumer ) u
) sdd_2 ##store_distribute_detail_2,
WHERE
sdd_1.store_id <= sdd_2.store_id
GROUP BY
sdd_2.store_id
3.Données mal alignées
SELECT
store_id,
CASE
WHEN lag ( rn1, 1 ) over () IS NULL THEN
1 ELSE lag ( rn1, 1 ) over ()
END AS rn2,
rn1
FROM
(
SELECT
sdd_2.store_id,
sum( sdd_1.store_distribute_people )+ 1 AS rn1
FROM
(
SELECT
store_id,
round( amt_rate * user_cnt, 0 ) AS store_distribute_people
FROM
store_mapping,
( SELECT count( user_id ) AS user_cnt FROM consumer ) u
) sdd_1,##store_distribute_detail_1,
(
SELECT
store_id,
round( amt_rate * user_cnt, 0 ) AS store_distribute_people
FROM
store_mapping,
( SELECT count( user_id ) AS user_cnt FROM consumer ) u
) sdd_2 ##store_distribute_detail_2,
WHERE
sdd_1.store_id <= sdd_2.store_id
GROUP BY
sdd_2.store_id
) a
4. Début de la distribution
Si votreSQLSoutienISNULL/NVLFonctions, Peut remplacer CASE WHEN.
-- insert into distribute_over --Confirmer que les données sont correctes、 Dans la table finale
SELECT
user_id,store_id,rn
FROM
( SELECT user_id, row_number () over ( ORDER BY user_id ) rn FROM consumer ) user_info
LEFT JOIN (
SELECT
store_id,
CASE
WHEN lag ( rn1, 1 ) over () IS NULL THEN
1 ELSE lag ( rn1, 1 ) over ()
END AS rn2, -- Si votresqlSoutienISNULL/NVLAlors pas besoincase whenC'est
rn1
FROM
(
SELECT
sdd_2.store_id,
sum( sdd_1.store_distribute_people )+ 1 AS rn1
FROM
(
SELECT
store_id,
round( amt_rate * user_cnt, 0 ) AS store_distribute_people
FROM
store_mapping,
( SELECT count( user_id ) AS user_cnt FROM consumer ) u
) sdd_1,##store_distribute_detail_1,
(
SELECT
store_id,
round( amt_rate * user_cnt, 0 ) AS store_distribute_people
FROM
store_mapping,
( SELECT count( user_id ) AS user_cnt FROM consumer ) u
) sdd_2 ##store_distribute_detail_2,
WHERE
sdd_1.store_id <= sdd_2.store_id GROUP BY sdd_2.store_id ) a ) dis ON user_info.rn >= dis.rn2
AND user_info.rn < dis.rn1
5.Validation des données- En accord avec l'effet idéal .
SELECT
count( DISTINCT user_id )
FROM
distribute_over
GROUP BY
store_id;
Contenu connexe
kettleComponents【Requête de dimension/Mise à jour】Utilisation de
https://blog.csdn.net/weixin_43932609/article/details/124734608?spm=1001.2014.3001.5501
kettleComponentsHTTP clientComment utiliser
https://blog.csdn.net/weixin_43932609/article/details/123984884?spm=1001.2014.3001.5502
Kettle Exportation circulaire de données complètes de la Bibliothèque
https://blog.csdn.net/weixin_43932609/article/details/119610480?spm=1001.2014.3001.5502
ETLOutilskettleComment calculer
https://blog.csdn.net/weixin_43932609/article/details/110371110
KettleDans l'outilRest clientUtilisation des composants!!
https://blog.csdn.net/weixin_43932609/article/details/109988783
=========================================================
La vie doit être heureuse,Ne laissez pas la bouteille d'or vide contre la lune!
__ .Un programmeur passionné de rap .
Musique recommandée aujourd'hui :Sung - woo.DamnShine / KEY.LLiu Cong / ICE《 Longli Wire (LIVEÉdition)》
=========================================================
Mentions de copyright
Auteur de cet article [Excellent comme un germe de haricot],Réimpression s’il vous plaît apporter le lien vers l’original, merci
https://fra.chowdera.com/2022/204/202207221302498034.html
Recommandé par sidebar
- ACL - ijcai - Sigir top Conference Paper presentation Conference (ais 2022) Note 2: Analysis and interpretability
- Félicitations pour la tenue réussie du Forum sur la gestion de l'innovation de produits « innovation et autonomisation » le 16 juillet
- Leetcode - zj - future04: distribution des marchandises en magasin
- Idea décompile toute la source du paquet jar
- Cohérence finale transactions distribuées STC
- Développement d'ardunio - processus de fonctionnement des pompes
- Conception d'un système de consommation de supermarchés sans pilote basé sur stm32
- Classification de l'index MySQL et exemples d'utilisation
- Tas (file d'attente prioritaire)
- Utilisation et cas de regexp pour les déclarations MySQL
Devinez que vous aimez
【 série mysql】 "résoudre une fois pour toutes le problème de l'erreur" insérer des données chinoises "dans MySQL
2022 - 07 - 18 sous - Requête - optimisation du traitement de l'optimiseur de requête join pour le scénario exists
Notes de classe de la Silicon Valley (Partie 2)
Pytorch Deep Learning Practice - 1 - Overview
MySQL Exercise one database Knowledge
Succès de la construction du cluster expérimental tdengine
Enregistrer un résumé de la mesure de pression jmeter
Ssti Summary and ciscn 2019 South East China] double secret
Les bases de l'IOT - NB
Technologie des commutateurs et des routeurs: ACL standard, ACL étendu et ACL nommé
Recommandé au hasard
- ECCV 2022 | correction des dommages importants au rendement de la cible causés par le fpn: Vous devriez regarder tous les objets
- Chaque jour - jour 41 - 125. Vérifier la chaîne de palindromes
- [traduction de l'article] Aperçu du radiographe apprentissage par la surveillance croisée entre les images
- Codeforce D2. RGB substring (Hard version) Sliding Window
- Cause du tampon / cache du serveur et libération du tampon / cache
- NFS Shared Storage Service
- Ajout, suppression et modification de MySQL (niveau avancé)
- Pointeur de fonction C et fonction de rappel
- Qt Notes - nombre de lignes traînées et de mouvements pour le Widget qtablewidget
- Inscription des femmes
- Le mot de passe MySQL est correct, mais une erreur de démarrage n'a pas été signalée pour créer des connexions initiales de pool. Accès refusé pour l'utilisateur 'root' @ 'localhost
- 【 sdio】 résumé de l'analyse du Protocole sd2.0 (Ⅲ) - - Introduction aux commandes pertinentes de la carte SD
- App mobile End test [6] application (APK) package Management and Activity
- Qt | boîtes de dialogue modales et non modales qdialog
- Interrogation aléatoire de n données dans diverses bases de données
- Idea construit le projet jfinal + génération automatique de code + test de fonctionnement de la base de données (trois méthodes)
- Flutter premier programme Hello world!
- Constructeurs et destructeurs de classes dérivées
- Conception du modèle de données de la base de données newsql
- Résumé de fin d'année 2017
- Comment le détournement de DNS peut - il être parfaitement réparé? Comment résoudre le problème du détournement de DNS
- Flask Cross - Domain
- Mise en œuvre de la pile de chaînes (langage c)
- Lire attentivement le document DETR et analyser la structure du modèle
- [FPGA]: IP Core - - DDR3
- L'applet Wechat ne peut pas lire la propriété 'setdata' de NULL Error
- Buctf passing Diary - - [Netting Cup 2020 Qinglong Group] areuserialz
- Notes d'apprentissage du système intégré
- Cartesi mars 2022 Review
- Double pointeur quotidien leetcode - 7
- Ji Yuan Community ai Weekly # 90: Ma Yi pense que l'intelligence ne peut pas dépendre d'une grande puissance de calcul; Hugging face blog pour découvrir les détails de la formation bloom; Annonce du prix ICML pour la meilleure thèse
- Typescript
- Outils open source Introduction aux outils SAP ui5
- Guide du tutoriel Lark
- Sécurité du réseau - pénétration à l'aide d'une vulnérabilité de sécurité d'accès physique Evil Maid
- Sécurité du réseau - pénétration et renforcement à l'aide d'une vulnérabilité locale Ubuntu
- Rédaction de la classe d'outils jwt
- Boom 3D Serial Number Licensing superbes Sound Enhancement and player Tools
- Day1 Running SUMM of 1D Array / find pivot index / queue with two Stacks
- Introduction de l'API commune de programmation de socket et mise en œuvre de socket, select, Poll et epoll