数据库中group by和having语法使用详解_MySQL
bitsCN.com
有个朋友问我一个返话费的问题,大概意思是这样的:只需把表deal中所有手机用户某天充值两次以上且总金额超过50的用户充值记录查询出来,至于怎么进行返话费那不是重点。
先看看group by的语法:
SELECT column1, SUM(column2) FROM "list-of-tables" GROUP BY "column-list";
GROUP BY子句将集中所有的行在一起,它包含了指定列的数据以及允许合计函数来计算一个或者多个列。
假设我们将从员工表employee表中搜索每个部门中工资最高的薪水,可以使用以下的SQL语句:
SELECT max(salary), dept FROM employee GROUP BY dept;
这条语句将在每一个单独的部门中选择工资最高的工资,结果将他们的salary和dept返回。
group by 顾名思义就是按照xxx进行分组,它必须有“聚合函数”来配合才能使用,使用时至少需要一个分组标识字段。
聚合函数有:sum()、count()、avg()等,使用group by目的就是要将数据分组进行汇总操作。
例如对员工表的操作:
select dept_id,count(emp_id),sum(salary) form employee group by dept_id;
这样的运行结果就是以“dept_id”为分类标志统计各单位的职工人数和工资总额。
再看看having的语法:
SELECT column1, SUM(column2) FROM “list-of-tables” GROUP BY “column-list” HAVING “condition”;
这个HAVING子句的作用就是为每一个组指定条件,像where指定条件一样,也就是说,可以根据你指定的条件来选择行。如果你要使用HAVING子句的话,它必须处在GROUP BY子句之后。
例如还是对员工表的操作:
SELECT dept_id, avg(sal) FROM employee GROUP BY dept_id HAVING avg(salary) >= 4000;
这样的运行结果就是以“dept_id”为分类标志统计各单位的职工人数和工资平均数且工资平均数大于4000。
下面开始我们的返话费查询功能的实现:
话费表deal字段有这些:
sell_no:订单编号
name:用户名
phone:用户手机号
amount:充值金额
date:充值日期
上边就这些有效字段,假如数据(数据纯属虚构,如有*,纯是巧合)如下:
sell_no name phone amount date
00000000001 李晓红 15822533496 50 2011-10-23 08:09:23
00000000002 李晓红 15822533496 60 2011-10-24 08:15:34
00000000003 李晓红 15822533496 30 2011-10-24 12:20:56
00000000004 杨 轩 18200000000 100 2011-10-24 07:59:43
00000000005 杨 轩 18200000000 200 2011-10-24 10:11:11
00000000006 柳梦璃 18211111111 50 2011-10-24 09:09:46
00000000007 韩菱纱 18222222222 50 2011-10-24 08:09:45
00000000008 云天河 18333333333 50 2011-10-24 08:09:25
把以上数据当天(2011-10-24)交过两次话费,而且总金额大于50的数据取出来,要取的结果如下:
00000000002 李晓红 15822533496 60 2011-10-24 08:15:34
00000000003 李晓红 15822533496 30 2011-10-24 12:20:56
00000000004 杨 轩 18200000000 100 2011-10-24 07:59:43
00000000005 杨 轩 18200000000 200 2011-10-24 10:11:11
因为今天(2011-10-24)李晓红和杨轩交过两次以上话费,而且总金额大于50,所以有他们的数据,而柳梦璃,韩菱纱,云天河只交过一次,所以没他们的数据。
我的处理思路大概是这样的,先把当天日期的记录用group by进行手机号分组即一个手机号为一组,接着用having子句进行过滤,把交过两次话费且话费总金额大于50的手机号查出来,最后用手机号和日期条件组合查询就能完成数据的查询,具体如下。
注意日期处理细节,要查询的某一天(yyyy-MM-dd)的所有记录mysql是这样处理的:
SELECT date_format(date,'%Y-%m-%d') from deal;
查询出符合条件(交过两次以上话费,而且总金额大于50)的手机号:
select phone from deal where date_format(date,'%Y-%m-%d')="2011-10-24" group by phone having count(phone)>1 and sum(amount)>50;
结合手机号和日期查询出最终记录:
select * from deal where date_format(date,'%Y-%m-%d')="2011-10-24" and phone in
(select phone from deal where date_format(date,'%Y-%m-%d')="2011-10-24"
group by phone having count(phone)>1 and sum(amount)>50) order by phone;
里边嵌套了一个select语句,感觉效率低点了,谁有更高效的方法不?
附数据建库sql代码:
create database if not exists `phone_deal`;
USE `phone_deal`;
DROP TABLE IF EXISTS `deal`;
CREATE TABLE `deal` (
`sell_no` varchar(100) NOT NULL,
`name` varchar(100) default NULL,
`phone` varchar(100) default NULL,
`amount` decimal(10,0) default NULL,
`date` datetime default NULL,
PRIMARY KEY (`sell_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into `deal`(`sell_no`,`name`,`phone`,`amount`,`date`) values ('00001','李晓红','15822533496','60','2011-10-23 08:09:23'),('00002','李晓红','15822533496','50','2011-10-24 08:15:34'),('00003','李晓红','15822533496','40','2011-10-24 12:20:56'),('00004','杨轩','18210607179','100','2011-10-24 07:59:43'),('00005','杨轩','18210607179','50','2011-10-24 10:11:11'),('00006','柳梦璃','15822533492','1000','2011-10-24 09:09:46'),('00007','韩菱纱','15822533493','10000','2011-10-24 08:09:45'),('00008','云天河','15822533494','500','2011-10-24 08:09:25');
bitsCN.com
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)

Sujets chauds

Avec le développement rapide des médias sociaux, Xiaohongshu est devenue l'une des plateformes sociales les plus populaires. Les utilisateurs peuvent créer un compte Xiaohongshu pour montrer leur identité personnelle et communiquer et interagir avec d'autres utilisateurs. Si vous avez besoin de trouver le numéro Xiaohongshu d’un utilisateur, vous pouvez suivre ces étapes simples. 1. Comment utiliser le compte Xiaohongshu pour trouver des utilisateurs ? 1. Ouvrez l'application Xiaohongshu, cliquez sur le bouton « Découvrir » dans le coin inférieur droit, puis sélectionnez l'option « Notes ». 2. Dans la liste des notes, recherchez la note publiée par l'utilisateur que vous souhaitez rechercher. Cliquez pour accéder à la page de détails de la note. 3. Sur la page de détails de la note, cliquez sur le bouton « Suivre » sous l'avatar de l'utilisateur pour accéder à la page d'accueil personnelle de l'utilisateur. 4. Dans le coin supérieur droit de la page d'accueil personnelle de l'utilisateur, cliquez sur le bouton à trois points et sélectionnez « Informations personnelles »

L'utilitaire Utilisateurs et groupes locaux est intégré à la gestion de l'ordinateur et est accessible depuis la console ou indépendamment. Cependant, certains utilisateurs constatent que les utilisateurs et groupes locaux manquent dans Windows 11. Pour certaines personnes qui y ont accès, le message suggère que ce composant logiciel enfichable pourrait ne pas fonctionner avec cette version de Windows 10. Pour gérer les comptes d'utilisateurs pour cet ordinateur, utilisez l'outil Comptes d'utilisateurs dans le Panneau de configuration. Le problème a été signalé dans les itérations précédentes de Windows 10 et est généralement dû à des problèmes ou à des oublis de la part de l'utilisateur. Pourquoi les utilisateurs et groupes locaux sont-ils absents dans Windows 11 ? Vous exécutez l'édition Windows Home, les utilisateurs et groupes locaux sont disponibles sur l'édition Professional et supérieure. Activité

Dans les systèmes Ubuntu, l'utilisateur root est généralement désactivé. Pour activer l'utilisateur root, vous pouvez utiliser la commande passwd pour définir un mot de passe, puis utiliser la commande su- pour vous connecter en tant que root. L'utilisateur root est un utilisateur disposant de droits d'administration système illimités. Il dispose des autorisations nécessaires pour accéder et modifier les fichiers, la gestion des utilisateurs, l'installation et la suppression de logiciels et les modifications de la configuration du système. Il existe des différences évidentes entre l'utilisateur root et les utilisateurs ordinaires. L'utilisateur root possède la plus haute autorité et des droits de contrôle plus étendus sur le système. L'utilisateur root peut exécuter des commandes système importantes et modifier des fichiers système, ce que les utilisateurs ordinaires ne peuvent pas faire. Dans ce guide, j'explorerai l'utilisateur root Ubuntu, comment se connecter en tant que root et en quoi il diffère d'un utilisateur normal. Avis

Certains dossiers ne sont pas toujours accessibles en raison des autorisations, et dans le guide d'aujourd'hui, nous allons vous montrer comment accéder aux dossiers utilisateur sur votre ancien disque dur sous Windows 11. Le processus est simple mais peut prendre un certain temps, parfois même des heures, selon la taille du lecteur, alors soyez extrêmement patient et suivez exactement les instructions de ce guide. Pourquoi ne puis-je pas accéder à mes dossiers utilisateur sur mon ancien disque dur ? Les dossiers utilisateur appartiennent à un autre ordinateur, vous ne pouvez donc pas les modifier. Vous ne disposez d'aucune autorisation sur le dossier autre que la propriété. Comment ouvrir les fichiers utilisateur sur un ancien disque dur ? 1. Devenez propriétaire du dossier et modifiez les autorisations. Recherchez l'ancien répertoire utilisateur, cliquez dessus avec le bouton droit et sélectionnez Propriétés. Accédez à "Un

sudo (exécution du superutilisateur) est une commande clé dans les systèmes Linux et Unix qui permet aux utilisateurs ordinaires d'exécuter des commandes spécifiques avec les privilèges root. La fonction de sudo se reflète principalement dans les aspects suivants : Fournir un contrôle des autorisations : sudo réalise un contrôle strict sur les ressources système et les opérations sensibles en autorisant les utilisateurs à obtenir temporairement les autorisations de superutilisateur. Les utilisateurs ordinaires ne peuvent obtenir des privilèges temporaires via sudo qu'en cas de besoin et n'ont pas besoin de se connecter en permanence en tant que superutilisateur. Sécurité améliorée : en utilisant sudo, vous pouvez éviter d'utiliser le compte root lors des opérations de routine. L'utilisation du compte root pour toutes les opérations peut entraîner des dommages inattendus au système, car toute opération incorrecte ou imprudente bénéficiera de toutes les autorisations. et

De nombreux utilisateurs ont été ajoutés au système Ubuntu. Je souhaite supprimer les utilisateurs qui ne sont plus utilisés. Comment les supprimer ? Jetons un coup d'œil au didacticiel détaillé ci-dessous. 1. Ouvrez la ligne de commande du terminal et utilisez la commande userdel pour supprimer l'utilisateur spécifié. Assurez-vous d'ajouter la commande d'autorisation sudo, comme indiqué dans la figure ci-dessous. 2. Lors de la suppression, assurez-vous d'être dans le répertoire des utilisateurs ordinaires. Je n'ai pas cette autorisation, comme le montre la figure ci-dessous. 3. Une fois la commande de suppression exécutée, comment juger si elle a été réellement supprimée ? Ensuite, nous utilisons la commande cat pour ouvrir le fichier passwd, comme le montre la figure ci-dessous 4. Nous voyons que les informations utilisateur supprimées ne sont plus dans le fichier passwd, ce qui prouve que l'utilisateur a été supprimé, comme le montre la figure ci-dessous. 5. Ensuite, nous entrons dans le fichier personnel

Microsoft a commencé à déployer KB2 auprès du public en tant que mise à jour facultative pour Windows 503145511H22 ou version ultérieure. Il s'agit de la première mise à jour à activer les fonctionnalités de Windows 11 Moment 4 par défaut, notamment Windows Copilot dans les zones prises en charge, la prise en charge de l'aperçu des éléments du menu Démarrer, le dissociation de la barre des tâches, etc. De plus, il corrige plusieurs bogues de Windows 11, notamment des problèmes de performances potentiels qui provoquaient des fuites de mémoire. Mais ironiquement, la mise à jour facultative de septembre 2023 sera un désastre pour les utilisateurs tentant d'installer la mise à jour, voire pour ceux qui l'ont déjà installée. De nombreux utilisateurs n'installeront pas ce Wi-Fi

1. Sélectionnez et ouvrez l'application [NetEase Cloud Music] sur le bureau du téléphone mobile, comme indiqué sur la figure. 2. Cliquez sur le bouton [Menu] dans le coin supérieur gauche pour afficher la barre de navigation latérale, comme indiqué sur la figure. 3. Cliquez et ouvrez [Mes membres], comme indiqué sur l'image. 4. Sélectionnez la méthode dont vous avez besoin pour recharger (vinyle VIP ou forfait musique), comme indiqué sur l'image. 5. Sélectionnez Payer maintenant pour terminer la recharge, comme indiqué sur l'image.
