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

Zusammenfassung der Methoden zur Änderung des Git-Commit-Protokolls

Fall 1: Letzte Übermittlung und kein Push Führen ...

So installieren Sie MySQL Community Server 5.6.39

Dieser Artikel enthält das ausführliche Tutorial ...

MySQL-Interviewfragen: So richten Sie Hash-Indizes ein

Zusätzlich zu den B-Tree-Indizes bietet MySQL auc...

Javascript-Bereich und Abschlussdetails

Inhaltsverzeichnis 1. Geltungsbereich 2. Geltungs...

So ermitteln Sie die Größe eines Linux-Systemverzeichnisses mit dem Befehl du

Jeder, der das Linux-System verwendet hat, sollte...

Vue+Vant implementiert die obere Suchleiste

In diesem Artikelbeispiel wird der spezifische Co...

Beispiel für Auslassungspunkte bei Überlauf von mehrzeiligem CSS-Text

Auslassungspunkte werden angezeigt, wenn mehrzeil...

So verwenden Sie cc.follow zur Kameraverfolgung in CocosCreator

Cocos Creator-Version: 2.3.4 Demo-Download: https...

Verstehen Sie die anfängliche Verwendung von Redux in React in einem Artikel

Redux ist ein Plug-In zur Datenstatusverwaltung. ...

Zusammenfassung der CSS-Schwebeelementanalyse

Float: links/rechts/keine; 1. Gleichstufiges Schw...

Einführung in semantische XHTML-Tags

Der erste Punkt ist, dass Menschen die Semantik vo...