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) Erfordern1) 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. Implementierungscode1) 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 DatenbankNachfolgend 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:
|
<<: Entwerfen Sie eine einfache HTML-Anmeldeoberfläche im CSS-Stil
>>: Block- und Zeilenelemente, Sonderzeichen und Verschachtelungsregeln in HTML
Hintergrund Durch das flexible Layout wird eine e...
Docker-Lernen https://www.cnblogs.com/poloyy/p/15...
Im Falle einer vollständigen Trennung von Front-E...
Übersicht über partitionierte MySQL-Tabellen Wir ...
Inhaltsverzeichnis Der Rendering-Mechanismus des ...
Es gibt zwei Möglichkeiten, .sh-Dateien im Linux-...
Mac-Knoten löschen und neu installieren löschen K...
Es ist sehr praktisch, den virtuellen Host vhost ...
Inhaltsverzeichnis Überblick Was ist die O-Notati...
Der DIV-Schwebeeffekt (feste Position) wird aussc...
Vorwort innodb_data_file_path wird verwendet, um ...
Vorwort Bei der Entwicklung statischer Seiten, wi...
Das Anwendungsszenario ist: Die Iframe-Seite hat k...
Manchmal ist es notwendig, bei Benutzereingaben e...