Heim Datenbank MySQL-Tutorial 数据库中group by和having语法使用详解_MySQL

数据库中group by和having语法使用详解_MySQL

Jun 01, 2016 pm 01:44 PM
nachfüllen 用户

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
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie verwende ich das Xiaohongshu-Konto, um Benutzer zu finden? Kann ich meine Handynummer finden? Wie verwende ich das Xiaohongshu-Konto, um Benutzer zu finden? Kann ich meine Handynummer finden? Mar 22, 2024 am 08:40 AM

Mit der rasanten Entwicklung der sozialen Medien hat sich Xiaohongshu zu einer der beliebtesten sozialen Plattformen entwickelt. Benutzer können ein Xiaohongshu-Konto erstellen, um ihre persönliche Identität zu zeigen und mit anderen Benutzern zu kommunizieren und zu interagieren. Wenn Sie die Xiaohongshu-Nummer eines Benutzers finden müssen, können Sie diese einfachen Schritte befolgen. 1. Wie verwende ich das Xiaohongshu-Konto, um Benutzer zu finden? 1. Öffnen Sie die Xiaohongshu-App, klicken Sie auf die Schaltfläche „Entdecken“ in der unteren rechten Ecke und wählen Sie dann die Option „Notizen“. 2. Suchen Sie in der Notizenliste nach der Notiz, die von dem Benutzer gepostet wurde, den Sie suchen möchten. Klicken Sie hier, um die Seite mit den Notizdetails aufzurufen. 3. Klicken Sie auf der Seite mit den Notizdetails auf die Schaltfläche „Folgen“ unter dem Avatar des Benutzers, um zur persönlichen Homepage des Benutzers zu gelangen. 4. Klicken Sie in der oberen rechten Ecke der persönlichen Homepage des Benutzers auf die Schaltfläche mit den drei Punkten und wählen Sie „Persönliche Informationen“.

Lokale Benutzer und Gruppen fehlen unter Windows 11: So fügen Sie sie hinzu Lokale Benutzer und Gruppen fehlen unter Windows 11: So fügen Sie sie hinzu Sep 22, 2023 am 08:41 AM

Das Dienstprogramm „Lokale Benutzer und Gruppen“ ist in die Computerverwaltung integriert und kann über die Konsole oder unabhängig davon aufgerufen werden. Einige Benutzer stellen jedoch fest, dass in Windows 11 lokale Benutzer und Gruppen fehlen. Für einige Personen, die Zugriff darauf haben, deutet die Meldung darauf hin, dass dieses Snap-In möglicherweise nicht mit dieser Version von Windows 10 funktioniert. Um Benutzerkonten für diesen Computer zu verwalten, verwenden Sie das Benutzerkonten-Tool in der Systemsteuerung. Das Problem wurde in früheren Versionen von Windows 10 gemeldet und wird normalerweise durch Probleme oder Versäumnisse auf Seiten des Benutzers verursacht. Warum fehlen lokale Benutzer und Gruppen in Windows 11? Sie verwenden die Windows Home Edition. Lokale Benutzer und Gruppen sind in der Professional Edition und höher verfügbar. Aktivität

Melden Sie sich als Superuser bei Ubuntu an Melden Sie sich als Superuser bei Ubuntu an Mar 20, 2024 am 10:55 AM

In Ubuntu-Systemen ist der Root-Benutzer normalerweise deaktiviert. Um den Root-Benutzer zu aktivieren, können Sie mit dem Befehl passwd ein Passwort festlegen und sich dann mit dem Befehl su- als Root anmelden. Der Root-Benutzer ist ein Benutzer mit uneingeschränkten Systemadministratorrechten. Er verfügt über Berechtigungen zum Zugriff auf und zum Ändern von Dateien, zur Benutzerverwaltung, zum Installieren und Entfernen von Software sowie zum Ändern der Systemkonfiguration. Es gibt offensichtliche Unterschiede zwischen dem Root-Benutzer und normalen Benutzern. Der Root-Benutzer verfügt über die höchste Autorität und umfassendere Kontrollrechte im System. Der Root-Benutzer kann wichtige Systembefehle ausführen und Systemdateien bearbeiten, was normale Benutzer nicht können. In dieser Anleitung werde ich den Ubuntu-Root-Benutzer untersuchen, wie man sich als Root anmeldet und wie er sich von einem normalen Benutzer unterscheidet. Beachten

Entdecken Sie den Windows 11-Leitfaden: So greifen Sie auf Benutzerordner auf Ihrer alten Festplatte zu Entdecken Sie den Windows 11-Leitfaden: So greifen Sie auf Benutzerordner auf Ihrer alten Festplatte zu Sep 27, 2023 am 10:17 AM

Auf einige Ordner kann aufgrund von Berechtigungen nicht immer zugegriffen werden. In der heutigen Anleitung zeigen wir Ihnen, wie Sie unter Windows 11 auf Benutzerordner auf Ihrer alten Festplatte zugreifen. Der Vorgang ist einfach, kann aber je nach Größe des Laufwerks eine Weile dauern, manchmal sogar Stunden. Seien Sie also besonders geduldig und befolgen Sie die Anweisungen in dieser Anleitung genau. Warum kann ich auf meiner alten Festplatte nicht auf meine Benutzerordner zugreifen? Benutzerordner gehören einem anderen Computer und können daher nicht geändert werden. Sie haben für diesen Ordner keine anderen Berechtigungen als den Besitz. Wie öffne ich Benutzerdateien auf einer alten Festplatte? 1. Übernehmen Sie den Besitz des Ordners und ändern Sie die Berechtigungen. Suchen Sie das alte Benutzerverzeichnis, klicken Sie mit der rechten Maustaste darauf und wählen Sie „Eigenschaften“. Navigieren Sie zu „An

Was ist Sudo und warum ist es wichtig? Was ist Sudo und warum ist es wichtig? Feb 21, 2024 pm 07:01 PM

sudo (Superuser-Ausführung) ist ein Schlüsselbefehl in Linux- und Unix-Systemen, der es normalen Benutzern ermöglicht, bestimmte Befehle mit Root-Rechten auszuführen. Die Funktion von sudo spiegelt sich hauptsächlich in den folgenden Aspekten wider: Bereitstellung von Berechtigungskontrolle: sudo erreicht eine strikte Kontrolle über Systemressourcen und sensible Vorgänge, indem es Benutzern erlaubt, vorübergehend Superuser-Berechtigungen zu erhalten. Normale Benutzer können über sudo bei Bedarf nur vorübergehende Berechtigungen erhalten und müssen sich nicht ständig als Superuser anmelden. Verbesserte Sicherheit: Durch die Verwendung von sudo können Sie die Verwendung des Root-Kontos bei Routinevorgängen vermeiden. Die Verwendung des Root-Kontos für alle Vorgänge kann zu unerwarteten Systemschäden führen, da für jeden fehlerhaften oder nachlässigen Vorgang die vollen Berechtigungen gewährt werden. Und

Tutorial: Wie lösche ich ein normales Benutzerkonto im Ubuntu-System? Tutorial: Wie lösche ich ein normales Benutzerkonto im Ubuntu-System? Jan 02, 2024 pm 12:34 PM

Dem Ubuntu-System wurden viele Benutzer hinzugefügt. Ich möchte die Benutzer löschen, die nicht mehr verwendet werden. Werfen wir einen Blick auf das ausführliche Tutorial unten. 1. Öffnen Sie die Terminal-Befehlszeile und löschen Sie den angegebenen Benutzer mit dem Befehl „sudo“ (siehe Abbildung unten). 2. Achten Sie beim Löschen darauf, dass Sie sich im Administratorverzeichnis befinden Sie verfügen nicht über diese Berechtigung, wie in der folgenden Abbildung dargestellt. 3. Wie kann nach der Ausführung des Löschbefehls beurteilt werden, ob er tatsächlich gelöscht wurde? Als nächstes verwenden wir den Befehl cat, um die passwd-Datei zu öffnen, wie in der Abbildung unten gezeigt. 4. Wir sehen, dass sich die gelöschten Benutzerinformationen nicht mehr in der passwd-Datei befinden, was beweist, dass der Benutzer gelöscht wurde, wie in der folgenden Abbildung gezeigt 5. Dann geben wir die Home-Datei ein

Die Installation von Windows 11 KB5031455 schlägt fehl, was bei einigen Benutzern zu anderen Problemen führt Die Installation von Windows 11 KB5031455 schlägt fehl, was bei einigen Benutzern zu anderen Problemen führt Nov 01, 2023 am 08:17 AM

Microsoft hat damit begonnen, KB2 als optionales Update für Windows 503145511H22 oder höher der Öffentlichkeit zugänglich zu machen. Dies ist das erste Update, das die Funktionen von Windows 11 Moment 4 standardmäßig aktiviert, darunter Windows Copilot in unterstützten Bereichen, Vorschauunterstützung für Elemente im Startmenü, Aufheben der Gruppierung der Taskleiste und mehr. Darüber hinaus werden mehrere Fehler in Windows 11 behoben, darunter potenzielle Leistungsprobleme, die zu Speicherverlusten führten. Aber ironischerweise wird das optionale Update für September 2023 eine Katastrophe für Benutzer sein, die versuchen, das Update zu installieren, oder sogar für diejenigen, die es bereits installiert haben. Viele Benutzer werden dieses WLAN nicht installieren

So laden Sie NetEase Cloud Music auf: Schritte zum Aufladen von NetEase Cloud Music So laden Sie NetEase Cloud Music auf: Schritte zum Aufladen von NetEase Cloud Music Mar 25, 2024 pm 09:20 PM

1. Wählen Sie die Anwendung [NetEase Cloud Music] auf dem Desktop des Mobiltelefons aus und öffnen Sie sie, wie in der Abbildung gezeigt. 2. Klicken Sie auf die Schaltfläche [Menü] in der oberen linken Ecke, um die seitliche Navigationsleiste aufzurufen, wie in der Abbildung gezeigt. 3. Klicken Sie auf und öffnen Sie [Meine Mitglieder], wie im Bild gezeigt. 4. Wählen Sie die Auflademethode (Vinyl-VIP oder Musikpaket), wie im Bild gezeigt. 5. Wählen Sie „Jetzt bezahlen“, um die Aufladung abzuschließen, wie im Bild gezeigt.

See all articles