So zeigen Sie den Prozentsatz und die ersten paar Prozent in MySQL an

So zeigen Sie den Prozentsatz und die ersten paar Prozent in MySQL an

Vor ein paar Tagen hat mich ein Freund gebeten, ihm beim Schreiben zu helfen. Ich habe es einfach so aufgeschrieben. Es scheint nicht schwierig zu sein, aber beim Schreiben sind mir einige Probleme begegnet. Die Optimierung ist nicht sehr gut. Wenn Sie gute Optimierungsmethoden kennen, teilen Sie sie uns bitte mit! (Datenbank am Ende des Artikels)

Erfordern

1) Fragen Sie das Verkaufsmengenverhältnis aller Produkte in allen Zeiträumen ab, sortieren Sie sie in absteigender Reihenfolge nach dem Verhältnis, filtern Sie die Produkte mit dem höchsten kumulierten Verhältnis von 80 % und geben Sie den Produktnamen mit dem Rang, das Verkaufsmengenverhältnis und das kumulierte Verhältnis aus.

2) Überprüfen Sie jederzeit die Verkaufssituation in jedem Land. Ein Verkaufsbetrag über 10.000 gilt als qualifiziert.

Andernfalls erfolgt eine Unqualifizierung und das Ergebnis wird als nationale Verkaufsmengenleistung ausgegeben.

3) Abfrage der Verkaufssituation in China und Großbritannien für jeden Monat. Wenn der Gesamtumsatz im August 2020 über 10.000 liegt, gilt er als qualifiziert, andernfalls als nicht qualifiziert. Wenn der Gesamtumsatz im September 2020 über 12.000 liegt, gilt er als qualifiziert, andernfalls als nicht qualifiziert. Die Ergebnisse geben die Verkaufsleistung Chinas und die Verkaufsleistung Großbritanniens für diesen Monat aus.

Implementierungscode

1)

SELECT a.productID Produkt-ID, (a.sale_amount * b.price) Verkaufsbetrag, CONCAT ((a.sale_amount * b.price / (select SUM(aa.sale_amount * bb.price) m von 2002a aa left join 2002b bb auf aa.productID = bb.productID)) * 100, "%") Prozent 
VON (wählen Sie @rownum:=0) r,2002a a,2002b b 
WO (@rownum:=@rownum+1)<=(select round(count(distinct a.productid)*0.8) aus 2002a a, 2002b b wobei a.productID = b.productID) 
UND a.ProduktID = b.ProduktID GRUPPIEREN NACH a.ProduktID BESTELLEN NACH (a.Verkaufsbetrag * b.Preis) DESC;

2)

SELECT country country, SUM(price*sale_amount) sales amount, if(SUM(price*sale_amount)>10000,'qualifiziert','nicht qualifiziert') performance FROM 2002a a,2002b b,2002c c WHERE a.productID=b.productID AND a.customID=c.customID GROUP BY country;

3)

SELECT date_format(zTime,'%Y-%m') Monat, SUM(Preis*Verkaufsbetrag) Verkaufsbetrag,
if((date_format(zTime,'%Y-%m')='2020-08' AND SUM(price*sale_amount)>10000) OR (date_format(zTime,'%Y-%m')='2020-09' AND SUM(price*sale_amount)>13000) AND country='中国','合格','未合格') Verkaufsleistung in China,
if((date_format(zTime,'%Y-%m')='2020-08' OR SUM(price*sale_amount)>10000) AND (date_format(zTime,'%Y-%m')='2020-09' AND SUM(price*sale_amount)>13000) AND country='UK','Qualified','Unqualified') Verkaufszahlen in UK AB 2002a a,2002b b,2002c c 
WO a.productID=b.productID UND a.customID=c.customID UND Land IN('China','Land') UND (date_format(zTime,'%Y-%m')='2020-09' ODER date_format(zTime,'%Y-%m')='2020-08') GRUPPE NACH date_format(zTime,'%Y-%m');

Methode zum Anzeigen der ersten 80 % der Abfrageergebnisse:

Anzeige des Leistungsprozentsatzes:

Lernen wir zunächst die beiden Funktionen concat() und left() kennen, TRUNCATE(A,B)

CONCAT(str1,str2,...) verkettet Zeichenfolgen und gibt die Zeichenfolge zurück, die sich aus der Verkettung der Parameter ergibt. Wenn ein beliebiges Argument NULL ist, wird NULL zurückgegeben. Kann mehrfach gespleißt werden.

LEFT(str,length) fängt den String von links ab. Beschreibung: left(abgefangenes Feld, Abfanglänge)

TRUNCATE(A,B) gibt die auf B Dezimalstellen gekürzte Zahl A zurück. Wenn der Wert von B 0 ist, hat das Ergebnis keinen Dezimalpunkt bzw. keinen Dezimalteil. B kann auf eine negative Zahl gesetzt werden, um alle niederwertigen Werte ab der B-ten Ziffer links vom Dezimalpunkt von A abzuschneiden (auf Null zurückzusetzen). Alle Zahlen werden auf Null gerundet.

Kombinieren Sie es (ich habe left im obigen Code nicht verwendet): concat ( left (value1 / value2 *100,5),'%') als Beschwerderate

Beispiel:

SELECT id,CONCAT(TRUNCATE(passScore / (danScore+panScore+duoScore) *100,2),'%') als Verhältnis von Punktzahl zu Gesamtpunktzahl FROM aqsc_kaoshi_record;

Implementieren Sie eine MySQL-Abfrage, um die ersten paar Prozent der Daten abzurufen (hier sind es 80 %)

MySQL unterstützt top und rowid nicht und die Verwendung von limit funktioniert nicht. Gehen Sie daher wie folgt vor:

WÄHLEN Sie a.* 
VON (AUSWÄHLEN @rownum:=0) r,2002a a 
WO (@rownum:=@rownum+1)<=(select round(count(*)*0.8) aus 2002a); 

Die Zeilennummer ist hier nur ein Variablenname. Sie können auch andere

Die ersten 20 % der Fälle nach dem Sortieren der Noten in der Schülertabelle von der größten zur kleinsten:

Wählen Sie @rownum:=@rownum+1,student.* 
VON (Auswahl @rownum:=0) Zeile, (Auswahl * aus Student, sortiert nach Student.Klasse absteigend) Student ##Sortierung WO @rownum<(Auswahl Runde(Anzahl(*)/4) aus Student) 

Zusätzlich zu if ein Beispiel für die Implementierung der Urteilsanzeige:

wählen 
       Summe (Fall wenn Geschlecht = '男', dann 1, sonst 0, Ende) /* Hiermit ermitteln Sie die Anzahl der männlichen Studenten*/
       Summe (Fall wenn Geschlecht = 'Mädchen', dann 1, sonst 0, Ende) /* Hiermit ermitteln Sie die Anzahl der Mädchen*/
vom Studenten

Datenbank

Nachfolgend sehen Sie den vollständigen Datenbankcode:

/*
Navicat MySQL-Datenübertragung

Quellserver: Erster
Quellserverversion: 80011
Quellhost: localhost:3306
Quelldatenbank: fr_test_sql

Zielservertyp: MySQL
Zielserverversion: 80011
Dateikodierung: 65001

Datum: 2021-12-18 16:06:19
*/

SETZEN SIE FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Tabellenstruktur für `2002a`
-- ----------------------------
Tabelle löschen, wenn `2002a` vorhanden ist;
CREATE TABLE `2002a` (
  `orderID` varchar(255) NICHT NULL,
  `zTime` Datum NICHT NULL,
  `productID` varchar(255) NICHT NULL,
  `sale_amount` int(11) NICHT NULL,
  `customID` varchar(255) NICHT NULL,
  PRIMÄRSCHLÜSSEL (`orderID`)
)ENGINE=InnoDB STANDARD-CHARSET=utf8;

-- ----------------------------
-- Aufzeichnungen von 2002a
-- ----------------------------
EINFÜGEN IN `2002a` WERTE ('O001', '2020-09-10', 'P010', '96', 'C008');
EINFÜGEN IN `2002a` WERTE ('O002', '2020-08-29', 'P008', '38', 'C007');
EINFÜGEN IN `2002a` WERTE ('O003', '2020-08-10', 'P007', '97', 'C008');
EINFÜGEN IN `2002a` WERTE ('O004', '2020-09-27', 'P005', '62', 'C006');
EINFÜGEN IN `2002a` WERTE ('O005', '2020-08-17', 'P007', '37', 'C009');
EINFÜGEN IN `2002a` WERTE ('O006', '2020-09-06', 'P006', '3', 'C005');
EINFÜGEN IN `2002a` WERTE ('O007', '2020-08-30', 'P009', '86', 'C007');
EINFÜGEN IN `2002a` WERTE ('O008', '2020-09-04', 'P001', '34', 'C007');
EINFÜGEN IN `2002a` WERTE ('O009', '2020-09-09', 'P003', '99', 'C004');
EINFÜGEN IN `2002a` WERTE ('O010', '2020-09-06', 'P002', '65', 'C010');
EINFÜGEN IN `2002a` WERTE ('O011', '2020-08-08', 'P005', '11', 'C002');
EINFÜGEN IN `2002a` WERTE ('O012', '2020-09-20', 'P002', '3', 'C008');
EINFÜGEN IN `2002a` WERTE ('O013', '2020-08-15', 'P004', '9', 'C004');
EINFÜGEN IN `2002a` WERTE ('O014', '2020-08-28', 'P007', '99', 'C010');
EINFÜGEN IN `2002a` WERTE ('O015', '2020-08-23', 'P003', '3', 'C005');
EINFÜGEN IN `2002a` WERTE ('O016', '2020-08-08', 'P006', '51', 'C008');
EINFÜGEN IN `2002a` WERTE ('O017', '2020-09-04', 'P009', '99', 'C002');
EINFÜGEN IN `2002a` WERTE ('O018', '2020-08-12', 'P007', '86', 'C003');
EINFÜGEN IN `2002a` WERTE ('O019', '2020-09-22', 'P001', '73', 'C005');
EINFÜGEN IN `2002a` WERTE ('O020', '2020-08-03', 'P009', '22', 'C006');
EINFÜGEN IN `2002a` WERTE ('O021', '2020-08-22', 'P007', '54', 'C006');
EINFÜGEN IN `2002a` WERTE ('O022', '2020-09-29', 'P005', '59', 'C005');
EINFÜGEN IN `2002a` WERTE ('O023', '2020-08-15', 'P003', '45', 'C006');
EINFÜGEN IN `2002a` WERTE ('O024', '2020-09-12', 'P001', '10', 'C004');
EINFÜGEN IN `2002a` WERTE ('O025', '2020-08-23', 'P004', '56', 'C008');
EINFÜGEN IN `2002a` WERTE ('O026', '2020-09-17', 'P003', '57', 'C004');
EINFÜGEN IN `2002a` WERTE ('O027', '2020-08-23', 'P002', '73', 'C003');
EINFÜGEN IN `2002a` WERTE ('O028', '2020-09-22', 'P003', '50', 'C008');
EINFÜGEN IN `2002a` WERTE ('O029', '2020-09-22', 'P003', '70', 'C007');
EINFÜGEN IN `2002a` WERTE ('O030', '2020-08-13', 'P006', '15', 'C002');

-- ----------------------------
-- Tabellenstruktur für `2002b`
-- ----------------------------
Tabelle löschen, wenn `2002b` vorhanden ist;
CREATE TABLE `2002b` (
  `productID` varchar(255) ZEICHENSATZ utf8 SORTIMENT utf8_general_ci NICHT NULL,
  `productName` varchar(255) ZEICHENSATZ utf8 SORTIMENT utf8_general_ci NICHT NULL,
  `Preis` Dezimalzahl (10,0) NICHT NULL,
  PRIMÄRSCHLÜSSEL (`productID`)
)ENGINE=InnoDB STANDARD-CHARSET=utf8;

-- ----------------------------
-- Aufzeichnungen von 2002b
-- ----------------------------
INSERT INTO `2002b` VALUES ('P001', 'Produkt A', '29');
INSERT INTO `2002b` VALUES ('P002', 'Produkt B', '50');
INSERT INTO `2002b` VALUES ('P003', 'Produkt C', '42');
INSERT INTO `2002b` VALUES ('P004', 'Produkt D', '59');
INSERT INTO `2002b` VALUES ('P005', 'Produkt E', '49');
INSERT INTO `2002b` VALUES ('P006', 'Produkt F', '10');
INSERT INTO `2002b` VALUES ('P007', 'Produkt G', '23');
INSERT INTO `2002b` VALUES ('P008', 'Produkt H', '24');
INSERT INTO `2002b` VALUES ('P009', 'Produkt I', '50');
INSERT INTO `2002b` VALUES ('P010', 'Produkt J', '64');

-- ----------------------------
-- Tabellenstruktur für `2002c`
-- ----------------------------
Tabelle löschen, wenn `2002c` vorhanden ist;
CREATE TABLE `2002c` (
  `customID` varchar(255) ZEICHENSATZ utf8 SORTIMENT utf8_general_ci NICHT NULL,
  `customName` varchar(255) NICHT NULL,
  `Land` varchar(255) NICHT NULL,
  PRIMÄRSCHLÜSSEL (`customID`)
)ENGINE=InnoDB STANDARD-CHARSET=utf8;

-- ----------------------------
-- Aufzeichnungen von 2002c
-- ----------------------------
INSERT INTO `2002c` VALUES ('C001', 'Kunde A', 'China');
INSERT INTO `2002c` VALUES ('C002', 'Kunde B', 'Frankreich');
INSERT INTO `2002c` VALUES ('C003', 'Kunde C', 'China');
INSERT INTO `2002c` VALUES ('C004', 'Kunde D', 'Vereinigtes Königreich');
INSERT INTO `2002c` VALUES ('C005', 'Kunde E', 'Vereinigte Staaten');
INSERT INTO `2002c` VALUES ('C006', 'Kunde F', 'China');
INSERT INTO `2002c` VALUES ('C007', 'Kunde G', 'Frankreich');
INSERT INTO `2002c` VALUES ('C008', 'Kunde H', 'Vereinigtes Königreich');
INSERT INTO `2002c` VALUES ('C009', 'Kunde I', 'Vereinigte Staaten');
INSERT INTO `2002c` VALUES ('C010', 'Kunde H', 'Vereinigtes Königreich');

-- ----------------------------
-- Tabellenstruktur für `2003_a`
-- ----------------------------
Tabelle löschen, wenn `2003_a` vorhanden ist;
CREATE TABLE `2003_a` (
  `CLASSNO` varchar(255) DEFAULT NULL,
  `STUDENTNO` varchar(255) DEFAULT NULL,
  `GRADE` varchar(255) STANDARD NULL
)ENGINE=InnoDB STANDARD-CHARSET=utf8;

-- ----------------------------
-- Aufzeichnungen von 2003_a
-- ----------------------------
INSERT INTO `2003_a` VALUES ('KLASSE1', '1001', '86');
INSERT INTO `2003_a` VALUES ('KLASSE1', '1002', '60');
INSERT INTO `2003_a` VALUES ('KLASSE1', '1003', '85');
INSERT INTO `2003_a` VALUES ('KLASSE1', '1004', '73');
INSERT INTO `2003_a` VALUES ('KLASSE1', '1005', '95');
INSERT INTO `2003_a` VALUES ('CLASS1', '1006', '61');
INSERT INTO `2003_a` VALUES ('KLASSE1', '1007', '77');
INSERT INTO `2003_a` VALUES ('KLASSE1', '1008', '71');
INSERT INTO `2003_a` VALUES ('KLASSE1', '1009', '61');
INSERT INTO `2003_a` VALUES ('KLASSE1', '1010', '78');
INSERT INTO `2003_a` VALUES ('KLASSE2', '2001', '81');
INSERT INTO `2003_a` VALUES ('KLASSE2', '2002', '54');
INSERT INTO `2003_a` VALUES ('KLASSE2', '2003', '57');
INSERT INTO `2003_a` VALUES ('KLASSE2', '2004', '75');
INSERT INTO `2003_a` VALUES ('KLASSE2', '2005', '98');
INSERT INTO `2003_a` VALUES ('KLASSE2', '2006', '75');
INSERT INTO `2003_a` VALUES ('KLASSE2', '2007', '76');
INSERT INTO `2003_a` VALUES ('KLASSE2', '2008', '58');
INSERT INTO `2003_a` VALUES ('KLASSE2', '2009', '73');
INSERT INTO `2003_a` VALUES ('KLASSE2', '2010', '55');
INSERT INTO `2003_a` VALUES ('CLASS3', '3001', '42');
INSERT INTO `2003_a` VALUES ('CLASS3', '3002', '90');
INSERT INTO `2003_a` VALUES ('CLASS3', '3003', '81');
INSERT INTO `2003_a` VALUES ('CLASS3', '3004', '97');
INSERT INTO `2003_a` VALUES ('CLASS3', '3005', '68');
INSERT INTO `2003_a` VALUES ('CLASS3', '3006', '72');
INSERT INTO `2003_a` VALUES ('CLASS3', '3007', '81');
INSERT INTO `2003_a` VALUES ('CLASS3', '3008', '79');
INSERT INTO `2003_a` VALUES ('CLASS3', '3009', '87');
INSERT INTO `2003_a` VALUES ('CLASS3', '3010', '59');

-- ----------------------------
-- Tabellenstruktur für `2004_a`
-- ----------------------------
Tabelle löschen, wenn `2004_a` vorhanden ist;
CREATE TABLE `2004_a` (
  `TYEAR` varchar(255) DEFAULT NULL,
  `TMONTH` varchar(255) DEFAULT NULL,
  `SALE_MONEY` varchar(255) STANDARD NULL
)ENGINE=InnoDB STANDARD-CHARSET=utf8;

-- ----------------------------
-- Aufzeichnungen von 2004_a
-- ----------------------------
INSERT INTO `2004_a` VALUES ('2019', '10', '1279');
INSERT INTO `2004_a` VALUES ('2019', '11', '2316');
INSERT INTO `2004_a` VALUES ('2019', '12', '2090');
INSERT INTO `2004_a` VALUES ('2020', '01', '1086');
INSERT INTO `2004_a` VALUES ('2020', '02', '2046');
INSERT INTO `2004_a` VALUES ('2020', '03', '0');
INSERT INTO `2004_a` VALUES ('2020', '04', '2959');
INSERT INTO `2004_a` VALUES ('2020', '05', '1314');
INSERT INTO `2004_a` VALUES ('2020', '06', '2751');
INSERT INTO `2004_a` VALUES ('2020', '07', '1492');
INSERT INTO `2004_a` VALUES ('2020', '08', '1414');
INSERT INTO `2004_a` VALUES ('2020', '09', '2895');
INSERT INTO `2004_a` VALUES ('2020', '10', '2999');
INSERT INTO `2004_a` VALUES ('2020', '11', '1982');
INSERT INTO `2004_a` VALUES ('2020', '12', '2793');
INSERT INTO `2004_a` VALUES ('2021', '01', '2156');
INSERT INTO `2004_a` VALUES ('2021', '02', '1733');
INSERT INTO `2004_a` VALUES ('2021', '03', '2184');

-- ----------------------------
-- Tabellenstruktur für `t_user`
-- ----------------------------
Tabelle löschen, wenn `t_user` vorhanden ist;
Tabelle „t_user“ erstellen (
  `user_id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Nummer',
  `user_access` varchar(20) NICHT NULL STANDARD '' KOMMENTAR 'Konto',
  `user_token` varchar(20) NOT NULL DEFAULT '123456' COMMENT 'Passwort',
  `user_nick` varchar(20) NICHT NULL STANDARD 'Benutzername' KOMMENTAR 'Benutzername',
  `user_gender` bit(1) NOT NULL DEFAULT b'1' COMMENT '1 für männlich, 0 für weiblich',
  `user_hobbies` varchar(20) NICHT NULL KOMMENTAR 'Hobbys',
  `user_type` int(1) NICHT NULL STANDARD '1' KOMMENTAR 'Typ',
  PRIMÄRSCHLÜSSEL (`user_id`),
  EINZIGARTIGER SCHLÜSSEL `uk_user_access` (`user_access`) MIT BTREE
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Aufzeichnungen von t_user
-- ----------------------------
INSERT INTO `t_user` VALUES ('1', 'cqswxy', '111111', 'Chongqing Business', '', 'Programmierung, Spiele', '3');
INSERT INTO `t_user` VALUES ('2', 'zjczjc', '222222', 'Programmieren, Lernen', '', 'Programmieren, Lernen', '2');
INSERT INTO `t_user` VALUES ('3', 'cetoox', '333333', 'Die Lichtgeschwindigkeit ist null', '', 'Spiel, Studie', '1');
INSERT INTO `t_user` VALUES ('4', 'XXX', '23', 'XXX', '', 'XXXX', '1');
INSERT INTO `t_user` VALUES ('6', 'dasda', '123456', 'Benutzer', '', 'asd', '5');

-- ----------------------------
-- Tabellenstruktur für `t_user_type`
-- ----------------------------
Tabelle löschen, wenn `t_user_type` vorhanden ist;
CREATE TABLE `t_user_type` (
  `user_type_id` int(11) NICHT NULL AUTO_INCREMENT,
  `user_type_name` varchar(2) NICHT NULL,
  PRIMÄRSCHLÜSSEL (`user_type_id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Datensätze von t_user_type
-- ----------------------------
INSERT INTO `t_user_type` VALUES ('1', 'Anfänger');
INSERT INTO `t_user_type` VALUES ('2', 'Experte');
INSERT INTO `t_user_type` VALUES ('3', 'Legende');
INSERT INTO `t_user_type` VALUES ('4', 'Normal');
 

Oben finden Sie Einzelheiten zur Anzeige von Prozentsätzen und den ersten Prozentsätzen in MySQL. Weitere Informationen zur Prozentanzeige in MySQL finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • MySQL-Abfrageergebnisse werden auf einfache Weise in Prozenten angezeigt
  • Verwendung von „Select“, „Distinct“ und „Limit“ in MySQL
  • Die Auswirkungen des Limits auf die Abfrageleistung in MySQL
  • Wesentliche bedingte Abfrageanweisungen für MySQL-Datenbanken

<<:  Entwerfen Sie eine einfache HTML-Anmeldeoberfläche im CSS-Stil

>>:  Block- und Zeilenelemente, Sonderzeichen und Verschachtelungsregeln in HTML

Artikel empfehlen

So steuern Sie den Anteil untergeordneter Flex-Elemente auf der Hauptachse

Hintergrund Durch das flexible Layout wird eine e...

Detaillierter Prozess der FastAPI-Bereitstellung auf Docker

Docker-Lernen https://www.cnblogs.com/poloyy/p/15...

Vue implementiert Benutzeranmeldung und Token-Verifizierung

Im Falle einer vollständigen Trennung von Front-E...

Richtiger Einsatz von MySQL-Partitionstabellen

Übersicht über partitionierte MySQL-Tabellen Wir ...

So führen Sie .sh-Dateien im Linux-System aus

Es gibt zwei Möglichkeiten, .sh-Dateien im Linux-...

Fallstudie zum Löschen und Neuinstallieren eines Mac-Knotens

Mac-Knoten löschen und neu installieren löschen K...

Beispiel für die Konfiguration mehrerer virtueller Hosts in nginx

Es ist sehr praktisch, den virtuellen Host vhost ...

So lernen Sie algorithmische Komplexität mit JavaScript

Inhaltsverzeichnis Überblick Was ist die O-Notati...

Einige Hinweise zum Ändern des innodb_data_file_path-Parameters von MySQL

Vorwort innodb_data_file_path wird verwendet, um ...

So verwenden Sie Nginx, um domänenübergreifende Front-End-Probleme zu lösen

Vorwort Bei der Entwicklung statischer Seiten, wi...

JavaScript implementiert die Eingabeüberprüfung im Kennwortfeld

Manchmal ist es notwendig, bei Benutzereingaben e...

...