Maison >base de données >tutoriel mysql >Comment utiliser un SQL dans MySQL pour encapsuler plusieurs SQL qui ne peuvent pas être associés dans un jeu de résultats
Une brève explication du scénario commercial Pour faciliter la compréhension, les exigences commerciales ont été simplifiées.
Il existe désormais une activité de distribution. Tout le monde peut devenir distributeur pour partager l'activité. Une fois que quelqu'un achète via le lien d'activité partagée, le distributeur aura des informations sur les bénéfices. Bien entendu, les produits de l'activité de distribution peuvent également être achetés directement sans partager l'activité. lien. Mais il n’y aura pas de revenus de distribution. En termes de structure de table, toutes les commandes sont stockées dans la table de commande order
Pour celles ayant des relations de distribution, les informations de liaison de distribution (distributeur et personne distribuée) seront enregistrées dans recordDans le tableau, les disques achetés directement sans distribution ne seront pas ajoutés au tableau <code>disque
. Nous devons désormais compter le nombre total de commandes et d’enregistrements de distribution ce jour-là, en supposant que ce jour soit le 2022.11.08. order
中,对于存在分销关系的会将分销绑定信息(分销人与被分销人)记录到record
表中,不通过分销直接购买的不会在record
表中添加记录。现在要求统计一下当天的订单总数与分销记录总数,假设当天为2022.11.08。
如果是单独统计计算很简单,直接统计总数就可以:
统计当天的总订单数:
SELECT COUNT(1) total_couut FROM order WHERE DATE_FORMAT(order_create_time,'%Y-%m-%d') = '2022-11-08'
统计当天的分销总的分销记录数:
SELECT COUNT(1) record _count FROM record WHEREDATE_FORMAT(create_time,'%Y-%m-%d') = '2022-11-08'
但是如何将两个不同的统计信息封装到一个结果集中,这里提供一种处理方案,使用union all
SELECT COUNT(1) total_couut,0 record_count FROM order WHERE DATE_FORMAT(order_create_time,'%Y-%m-%d') = '2022-11-08' union all SELECT 0 total_count,COUNT(1) record _count FROM record WHEREDATE_FORMAT(create_time,'%Y-%m-%d') = '2022-11-08'Statistiques de la distribution du jour Nombre total d'enregistrements de distribution :
select sum(t.total_count) total_count, sum(t.record_count) record_count from (SELECT COUNT(1) total_couut,0 record_count FROM order WHERE DATE_FORMAT(order_create_time,'%Y-%m-%d') = '2022-11-08' union all SELECT 0 total_count,COUNT(1) record _count FROM record WHEREDATE_FORMAT(create_time,'%Y-%m-%d') = '2022-11-08') tMais comment combiner deux informations statistiques différentes Encapsulées dans un ensemble de résultats, voici une solution de traitement, utilisez
union all
pour effectuer une requête parallèle, puis effectuez une requête de sommation. La méthode de mise en œuvre spécifique est la suivante. 1. Utilisez union all pour les requêtes parallèles
Les résultats de la requête sont les suivants :
2. Traitement de la somme
🎜Maintenant que le nombre total de commandes et les enregistrements de distribution totaux ont été interrogés, ce qui doit être traité ensuite, c'est comment les encapsuler dans un ensemble de résultats. La méthode de traitement est également très simple, qui consiste à additionner directement parce que les valeurs des champs correspondants sont toutes 0,. L'implémentation spécifique est la suivante : 🎜rrreee🎜Les résultats de la requête sont les suivants : 🎜🎜🎜🎜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!