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

Detailliertes Tutorial zum PyCharm- und SSH-Remote-Access-Server-Docker

Hintergrund: Einige Experimente müssen auf dem Se...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 8.0.15 winx64

In diesem Artikel wird die Installations- und Kon...

Detaillierte Erläuterung der gespeicherten Prozedur „MySql View Trigger“

Sicht: Wenn eine temporäre Tabelle wiederholt ver...

So übertragen Sie Dateien zwischen Docker-Container und lokalem Computer

Zum Übertragen von Dateien zwischen dem Host und ...

Der Grund, warum MySQL den B+-Baum als zugrunde liegende Datenstruktur verwendet

Wir alle wissen, dass die zugrunde liegende Daten...

Analyse der zum Ausführen von Docker erforderlichen Berechtigungen

Zum Ausführen von Docker sind Root-Rechte erforde...

Verwenden Sie JS, um Dateien zu bearbeiten (FileReader liest --node's fs)

Inhaltsverzeichnis JS liest Datei FileReader doku...

So verwenden Sie reguläre Ausdrucksabfragen in MySql

Reguläre Ausdrücke werden häufig verwendet, um Te...

JavaScript verwendet Promise zur Verarbeitung mehrerer wiederholter Anfragen

1. Warum diesen Artikel schreiben? Sie haben sich...

Implementierung der Docker Compose-Mehrcontainerbereitstellung

Inhaltsverzeichnis 1. WordPress-Bereitstellung 1....

Detailliertes Tutorial zur Springcloud-Alibaba-Nacos-Linux-Konfiguration

Laden Sie zuerst das komprimierte Nacos-Paket von...

So implementieren Sie Eingabe-Checkboxen zur Erweiterung der Klickreichweite

XML/HTML-CodeInhalt in die Zwischenablage kopiere...

Natives JS zum Erzielen eines Puzzle-Effekts

In diesem Artikel wird der spezifische Code von n...