数日前、友人からこれを書くのを手伝ってほしいと頼まれました。ただ気楽に書きました。難しくはなさそうですが、書いている途中でいくつか問題に遭遇しました。最適化はあまり良くありません。何か良い最適化方法があればぜひ共有してください! (記事末尾のデータベース) 必要とする1) 全期間の全商品の売上金額比率を照会し、比率の降順で並び替え、累計比率上位80%の商品をフィルタリングし、ランキング商品名、売上金額比率、累計比率を出力します。 2) 各国の販売状況を随時確認し、販売額が10,000を超える場合は合格とみなします。 それ以外の場合は不適格となり、結果は全国売上高実績として出力されます。 3) 中国とイギリスの各月の販売状況を照会します。2020年8月の総販売額が10,000を超える場合は適格とみなされ、それ以外の場合は不適格とみなされます。2020年9月の総販売額が12,000を超える場合は適格とみなされ、それ以外の場合は不適格とみなされます。結果として、その月の中国の販売実績とイギリスの販売実績が出力されます。 実装コード1) SELECT a.productID 製品 ID、(a.sale_amount * b.price) 販売額、CONCAT((a.sale_amount * b.price / (select SUM(aa.sale_amount * bb.price) m from 2002a aa left join 2002b bb on aa.productID = bb.productID)) * 100,"%") パーセント (@rownum:=0 を選択) r、2002a a、2002b b から WHERE (@rownum:=@rownum+1)<=(select round(count(distinct a.productid)*0.8) from 2002a a, 2002b b where a.productID = b.productID) AND a.productID = b.productID GROUP BY a.productID ORDER BY (a.sale_amount * b.price) DESC; 2) SELECT country country、SUM(price*sale_amount) 売上高、if(SUM(price*sale_amount)>10000、'qualified'、'unqualified') パフォーマンス 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') 月、SUM(price*sale_amount) 売上高、 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='中国','合格','未合格') 中国の販売実績、 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') 2002a a、2002b b、2002c c からの英国の販売実績 a.productID=b.productID AND a.customID=c.customID AND country IN('中国','英国') AND (date_format(zTime,'%Y-%m')='2020-09' OR date_format(zTime,'%Y-%m')='2020-08') GROUP BY date_format(zTime,'%Y-%m'); クエリ結果の最初の 80% を表示する方法: 達成率表示: まず、2つの関数concat()とleft()、TRUNCATE(A,B)について学びましょう。 CONCAT(str1,str2,...) は文字列を連結し、パラメータの連結の結果の文字列を返します。いずれかの引数が NULL の場合、NULL を返します。複数回接合可能です。 LEFT(str,length) は文字列を左からインターセプトします。説明: left(インターセプトされたフィールド、インターセプトの長さ) TRUNCATE(A,B) は、小数点以下 B 桁に切り捨てられた数値 A を返します。 B の値が 0 の場合、結果には小数点または小数部が含まれません。 B を負の数に設定すると、A の小数点の左側の B 桁目から始まるすべての下位値が切り捨てられます (ゼロに戻ります)。すべての数値はゼロに向かって丸められます。 結合します(上記のコードではleftは使用していません):concat ( left (value1 / value2 *100,5),'%') as complaint rate 例: SELECT id,CONCAT(TRUNCATE(passScore / (danScore+panScore+duoScore) *100,2),'%') としてスコアと合計スコアの比率を取得します。FROM aqsc_kaoshi_record; 最初の数パーセントのデータ(ここでは80%)を取得するためのMySQLクエリを実装します。 MySQL は top と rowid をサポートしておらず、limit を使用しても機能しません。したがって、次のアプローチを使用します。
a.*を選択
(SELECT @rownum:=0) r,2002a aから
WHERE (@rownum:=@rownum+1)<=(2002a から round(count(*)*0.8) を選択); ここでのrownumは単なる変数名です。他の変数を使用することもできます。 学生テーブルの成績を大きいものから小さいものの順に並べ替えた後の最初の 20% のケース:
@rownum:=@rownum+1、学生.* を選択します。
FROM (select @rownum:=0) row 、(select * from student order by student.grade desc) student ##sort WHERE @rownum<(select round(count(*)/4) from student) ifに加えて、判定表示を実装する例: 選択 sum(case when sex = '男' then 1 else 0 end) /* これは男子生徒の数を調べるものです*/ sum(case when sex = '女' then 1 else 0 end) /* これは女の子の数を求めるものです*/ 学生から データベース完全なデータベース コードは次のとおりです。
/*
Navicat MySQLデータ転送
ソースサーバー: 最初
ソース サーバー バージョン: 80011
ソースホスト: localhost:3306
ソースデータベース: fr_test_sql
ターゲットサーバータイプ: MYSQL
ターゲット サーバー バージョン: 80011
ファイルエンコーディング: 65001
日付: 2021-12-18 16:06:19
*/
FOREIGN_KEY_CHECKS=0 に設定します。
-- ----------------------------
-- `2002a` のテーブル構造
-- ----------------------------
`2002a` が存在する場合はテーブルを削除します。
テーブル `2002a` を作成します (
`orderID` varchar(255) NOT NULL,
`zTime` 日付がNULLではない、
`productID` varchar(255) NOT NULL,
`sale_amount` int(11) NOT NULL,
`customID` varchar(255) NOT NULL,
主キー (`orderID`)
)ENGINE=InnoDB デフォルト文字セット=utf8;
-- ----------------------------
-- 2002aの記録
-- ----------------------------
`2002a` 値に ('O001'、'2020-09-10'、'P010'、'96'、'C008') を挿入します。
`2002a` 値に ('O002'、'2020-08-29'、'P008'、'38'、'C007') を挿入します。
`2002a` 値に ('O003'、'2020-08-10'、'P007'、'97'、'C008') を挿入します。
`2002a` 値に ('O004'、'2020-09-27'、'P005'、'62'、'C006') を挿入します。
`2002a` 値に ('O005'、'2020-08-17'、'P007'、'37'、'C009') を挿入します。
`2002a` 値に ('O006'、'2020-09-06'、'P006'、'3'、'C005') を挿入します。
`2002a` 値に ('O007'、'2020-08-30'、'P009'、'86'、'C007') を挿入します。
`2002a` 値に ('O008'、'2020-09-04'、'P001'、'34'、'C007') を挿入します。
`2002a` 値に ('O009'、'2020-09-09'、'P003'、'99'、'C004') を挿入します。
`2002a` 値に ('O010'、'2020-09-06'、'P002'、'65'、'C010') を挿入します。
`2002a` 値に ('O011'、'2020-08-08'、'P005'、'11'、'C002') を挿入します。
`2002a` 値に ('O012'、'2020-09-20'、'P002'、'3'、'C008') を挿入します。
`2002a` 値に ('O013'、'2020-08-15'、'P004'、'9'、'C004') を挿入します。
`2002a` 値に ('O014'、'2020-08-28'、'P007'、'99'、'C010') を挿入します。
`2002a` 値に ('O015'、'2020-08-23'、'P003'、'3'、'C005') を挿入します。
`2002a` 値に ('O016'、'2020-08-08'、'P006'、'51'、'C008') を挿入します。
`2002a` 値に ('O017'、'2020-09-04'、'P009'、'99'、'C002') を挿入します。
`2002a` 値に ('O018'、'2020-08-12'、'P007'、'86'、'C003') を挿入します。
`2002a` 値に ('O019'、'2020-09-22'、'P001'、'73'、'C005') を挿入します。
`2002a` 値に ('O020'、'2020-08-03'、'P009'、'22'、'C006') を挿入します。
`2002a` 値に ('O021'、'2020-08-22'、'P007'、'54'、'C006') を挿入します。
`2002a` 値に挿入します ('O022'、'2020-09-29'、'P005'、'59'、'C005')。
`2002a` 値に ('O023'、'2020-08-15'、'P003'、'45'、'C006') を挿入します。
`2002a` 値に ('O024'、'2020-09-12'、'P001'、'10'、'C004') を挿入します。
`2002a` 値に ('O025'、'2020-08-23'、'P004'、'56'、'C008') を挿入します。
`2002a` 値に ('O026'、'2020-09-17'、'P003'、'57'、'C004') を挿入します。
`2002a` 値に ('O027'、'2020-08-23'、'P002'、'73'、'C003') を挿入します。
`2002a` 値に ('O028'、'2020-09-22'、'P003'、'50'、'C008') を挿入します。
`2002a` 値に ('O029'、'2020-09-22'、'P003'、'70'、'C007') を挿入します。
`2002a` 値に ('O030'、'2020-08-13'、'P006'、'15'、'C002') を挿入します。
-- ----------------------------
-- `2002b` のテーブル構造
-- ----------------------------
`2002b` が存在する場合はテーブルを削除します。
テーブル `2002b` を作成します (
`productID` varchar(255) 文字セット utf8 COLLATE utf8_general_ci NOT NULL,
`productName` varchar(255) 文字セット utf8 COLLATE utf8_general_ci NOT NULL,
`price` 小数点(10,0) NOT NULL,
主キー (`productID`)
)ENGINE=InnoDB デフォルト文字セット=utf8;
-- ----------------------------
-- 2002年の記録b
-- ----------------------------
`2002b` VALUES ('P001'、'製品A'、'29') に INSERT INTO します。
`2002b` VALUES ('P002', '製品 B', '50') に INSERT INTO します。
`2002b` VALUES ('P003'、'製品 C'、'42') に INSERT INTO します。
`2002b` VALUES ('P004'、'製品 D'、'59') に INSERT INTO します。
`2002b` VALUES ('P005'、'製品 E'、'49') に INSERT INTO します。
`2002b` VALUES ('P006', '製品 F', '10') に INSERT INTO します。
`2002b` VALUES ('P007'、'製品 G'、'23') に INSERT INTO します。
`2002b` VALUES ('P008'、'製品 H'、'24') に INSERT INTO します。
`2002b` VALUES ('P009'、'製品 I'、'50') に INSERT INTO します。
`2002b` VALUES ('P010'、'製品 J'、'64') に INSERT INTO します。
-- ----------------------------
-- `2002c` のテーブル構造
-- ----------------------------
`2002c` が存在する場合はテーブルを削除します。
テーブル `2002c` を作成します (
`customID` varchar(255) 文字セット utf8 COLLATE utf8_general_ci NOT NULL,
`customName` varchar(255) NOT NULL,
`country` varchar(255) NOT NULL,
主キー (`customID`)
)ENGINE=InnoDB デフォルト文字セット=utf8;
-- ----------------------------
-- 2002年の記録
-- ----------------------------
`2002c` VALUES ('C001'、'顧客 A'、'中国') に INSERT INTO します。
`2002c` VALUES ('C002'、'顧客 B'、'フランス') に INSERT INTO します。
`2002c` VALUES ('C003'、'顧客 C'、'中国') に INSERT INTO します。
INSERT INTO `2002c` VALUES ('C004', '顧客 D', 'イギリス');
`2002c` VALUES ('C005', '顧客 E', '米国') に INSERT INTO します。
`2002c` VALUES ('C006', '顧客 F', '中国') に INSERT INTO します。
`2002c` VALUES ('C007'、'顧客 G'、'フランス') に INSERT INTO します。
INSERT INTO `2002c` VALUES ('C008', '顧客 H', 'イギリス');
`2002c` VALUES ('C009', '顧客 I', '米国') に INSERT INTO します。
INSERT INTO `2002c` VALUES ('C010', '顧客 H', 'イギリス');
-- ----------------------------
-- `2003_a` のテーブル構造
-- ----------------------------
`2003_a` が存在する場合はテーブルを削除します。
テーブル `2003_a` を作成します (
`CLASSNO` varchar(255) デフォルト NULL,
`STUDENTNO` varchar(255) デフォルト NULL,
`GRADE` varchar(255) デフォルト NULL
)ENGINE=InnoDB デフォルト文字セット=utf8;
-- ----------------------------
-- 2003年の記録_a
-- ----------------------------
`2003_a` に値 ('CLASS1'、'1001'、'86') を挿入します。
`2003_a` に値 ('CLASS1'、'1002'、'60') を挿入します。
`2003_a` に値 ('CLASS1'、'1003'、'85') を挿入します。
`2003_a` に値 ('CLASS1'、'1004'、'73') を挿入します。
`2003_a` に値 ('CLASS1'、'1005'、'95') を挿入します。
`2003_a` に値 ('CLASS1'、'1006'、'61') を挿入します。
`2003_a` に値 ('CLASS1'、'1007'、'77') を挿入します。
`2003_a` に値 ('CLASS1'、'1008'、'71') を挿入します。
`2003_a` に値 ('CLASS1'、'1009'、'61') を挿入します。
`2003_a` に値 ('CLASS1'、'1010'、'78') を挿入します。
`2003_a` に値 ('CLASS2'、'2001'、'81') を挿入します。
`2003_a` に値 ('CLASS2'、'2002'、'54') を挿入します。
`2003_a` に値 ('CLASS2'、'2003'、'57') を挿入します。
`2003_a` に値 ('CLASS2'、'2004'、'75') を挿入します。
`2003_a` に値 ('CLASS2'、'2005'、'98') を挿入します。
`2003_a` に値 ('CLASS2'、'2006'、'75') を挿入します。
`2003_a` に値 ('CLASS2'、'2007'、'76') を挿入します。
`2003_a` に値 ('CLASS2'、'2008'、'58') を挿入します。
`2003_a` に値 ('CLASS2'、'2009'、'73') を挿入します。
`2003_a` に値 ('CLASS2'、'2010'、'55') を挿入します。
`2003_a` に値 ('CLASS3'、'3001'、'42') を挿入します。
`2003_a` に値 ('CLASS3'、'3002'、'90') を挿入します。
`2003_a` に値 ('CLASS3'、'3003'、'81') を挿入します。
`2003_a` に値 ('CLASS3'、'3004'、'97') を挿入します。
`2003_a` に値 ('CLASS3'、'3005'、'68') を挿入します。
`2003_a` に値 ('CLASS3'、'3006'、'72') を挿入します。
`2003_a` に値 ('CLASS3'、'3007'、'81') を挿入します。
`2003_a` に値 ('CLASS3'、'3008'、'79') を挿入します。
`2003_a` に値 ('CLASS3'、'3009'、'87') を挿入します。
`2003_a` に値 ('CLASS3'、'3010'、'59') を挿入します。
-- ----------------------------
-- `2004_a` のテーブル構造
-- ----------------------------
`2004_a` が存在する場合はテーブルを削除します。
テーブル `2004_a` を作成します (
`TYEAR` varchar(255) デフォルト NULL,
`TMONTH` varchar(255) デフォルト NULL,
`SALE_MONEY` varchar(255) デフォルト NULL
)ENGINE=InnoDB デフォルト文字セット=utf8;
-- ----------------------------
-- 2004年の記録_a
-- ----------------------------
`2004_a` に値 ('2019'、'10'、'1279') を挿入します。
`2004_a` に値 ('2019'、'11'、'2316') を挿入します。
`2004_a` に値 ('2019'、'12'、'2090') を挿入します。
`2004_a` に値 ('2020'、'01'、'1086') を挿入します。
`2004_a` に値 ('2020'、'02'、'2046') を挿入します。
`2004_a` に値 ('2020'、'03'、'0') を挿入します。
`2004_a` に値 ('2020'、'04'、'2959') を挿入します。
`2004_a` に値 ('2020'、'05'、'1314') を挿入します。
`2004_a` に値 ('2020'、'06'、'2751') を挿入します。
`2004_a` に値 ('2020'、'07'、'1492') を挿入します。
`2004_a` に値 ('2020'、'08'、'1414') を挿入します。
`2004_a` に値 ('2020'、'09'、'2895') を挿入します。
`2004_a` に値 ('2020'、'10'、'2999') を挿入します。
`2004_a` に値 ('2020'、'11'、'1982') を挿入します。
`2004_a` に値 ('2020'、'12'、'2793') を挿入します。
`2004_a` に値 ('2021'、'01'、'2156') を挿入します。
`2004_a` に値 ('2021'、'02'、'1733') を挿入します。
`2004_a` に値 ('2021'、'03'、'2184') を挿入します。
-- ----------------------------
-- `t_user` のテーブル構造
-- ----------------------------
`t_user` が存在する場合はテーブルを削除します。
テーブル `t_user` を作成します (
`user_id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Number',
`user_access` varchar(20) NOT NULL DEFAULT '' COMMENT 'アカウント',
`user_token` varchar(20) NOT NULL DEFAULT '123456' COMMENT 'パスワード',
`user_nick` varchar(20) NOT NULL DEFAULT 'ユーザー名' COMMENT 'ユーザー名',
`user_gender` ビット(1) NOT NULL DEFAULT b'1' COMMENT '男性の場合は1、女性の場合は0',
`user_hobbies` varchar(20) NOT NULL COMMENT '趣味',
`user_type` int(1) NOT NULL DEFAULT '1' COMMENT 'Type',
主キー (`user_id`)、
ユニークキー `uk_user_access` (`user_access`) BTREE 使用
) ENGINE=InnoDB AUTO_INCREMENT=7 デフォルト CHARSET=utf8;
-- ----------------------------
-- t_user の記録
-- ----------------------------
INSERT INTO `t_user` VALUES ('1', 'cqswxy', '111111', '重慶ビジネス', '', 'プログラミング、ゲーム', '3');
INSERT INTO `t_user` VALUES ('2', 'zjczjc', '222222', '俊采星驰', '', 'プログラミング、学習', '2');
INSERT INTO `t_user` VALUES ('3', 'cetoox', '333333', '光の速度はゼロです', '', 'ゲーム、勉強', '1');
`t_user` に値 ('4'、'XXX'、'23'、'XXX'、''、'XXXX'、'1') を挿入します。
`t_user` に VALUES ('6', 'dasda', '123456', '虾米', '', 'asd', '5') を挿入します。
-- ----------------------------
-- `t_user_type` のテーブル構造
-- ----------------------------
`t_user_type` が存在する場合はテーブルを削除します。
テーブル `t_user_type` を作成します (
`user_type_id` int(11) NOT NULL AUTO_INCREMENT,
`user_type_name` varchar(2) NOT NULL、
主キー (`user_type_id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 デフォルト CHARSET=utf8;
-- ----------------------------
-- t_user_type のレコード
-- ----------------------------
`t_user_type` に VALUES ('1', 'rookie') を挿入します。
`t_user_type` に値 ('2'、'Expert') を挿入します。
`t_user_type` に値 ('3'、'凡例') を挿入します。
`t_user_type` に値 ('4'、'Normal') を挿入します。
上記は、MySQL でパーセンテージと最初の数パーセントを表示する方法の詳細です。MySQL のパーセンテージ表示の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: CSSスタイルを使用してシンプルなHTMLログインインターフェースを設計する
>>: HTML のブロックレベル要素と行レベル要素、特殊文字、ネスト規則
目次1 はじめに2 基本的な使い方2.1 方法2.2 計算プロパティ2.3 リスナーを見る3 3つの...
WindowsとLinux間のファイル転送(1)WinSCPを使用して、WindowsファイルをLi...
序文ご存知のとおり、Linux は ext4、ext3、ext2、sysfs、securityfs、...
1. はじめにプロジェクトではMySQLを使用しています。インターネット上の例を参考にインストール...
<html> <ヘッド> <meta http-equiv="...
このチュートリアルの動作環境: Windows 7 システム、MySQL 8 バージョン、Dell ...
この記事では、JavaScriptシミュレーション計算機の具体的なコードを参考までに紹介します。具体...
[LeetCode] 185. 部門別給与上位3位従業員テーブルにはすべての従業員が保持されます。...
パート3: ❤バックエンドデータ受信を見落とす3つの方法❤ (おすすめ集)パート 2: Web フォ...
太陽系の 8 つの惑星(衛星を除く)のアニメーションを作成します。すべての惑星は太陽の周りを回ってい...
1. instanceofの使用法instanceof演算子は、コンストラクター関数のprototy...
手工芸デザインからグラフィックデザイン、そしてウェブデザインまで、デザインの原則は同じままですが、私...
1. 同じIPアドレス、異なるポート番号仮想ホスト 1: ホスト IP アドレスは 172.16.3...
なぜ詰まっているのでしょうか?言及しなければならない前提があります。フロントエンド開発者は皆、ブラウ...
必要なファイルをインストールする Yum インストール openssl-* -yデータベースインデッ...