序文 今日、注文データを同期した後、同僚は、合計注文金額とデータソースの合計金額に差があったため、LIMIT 関数と SUM() 関数を使用して現在のページの合計金額を計算し、特定の注文の合計金額を他の当事者と比較することを選択しました。しかし、計算された金額はページ化された注文の合計金額ではなく、すべての注文の合計金額であることがわかりました。 データベースのバージョンは MySQL 5.7 です。以下では、例を使用して発生した問題を確認します。 問題のレビュー このレビューでは、非常に単純な注文テーブルを例として使用します。 データ準備 注文テーブルの作成ステートメントは以下のとおりです(ここでは面倒なので自動増分 ID を使用します。実際の開発では自動増分 ID を注文 ID として使用することは推奨されません) テーブル「order」を作成します( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '注文ID', `amount` 小数点(10,2) NOT NULL COMMENT '注文金額', 主キー (`id`) )ENGINE=InnoDB デフォルト文字セット=utf8mb4; 100の金額を挿入するSQLは次のようになります(10回実行) `order`(`amount`) VALUES (100) に INSERT します。 したがって、合計金額は 10 * 100 = 1000 になります。 問題のあるSQL limitを使用してページ内のデータを照会し、sum()関数を使用して現在のページの合計量を計算します。 選択 SUM(`金額`) から 「注文」 `id` で並べ替え 制限5; 前述のように、期待される結果は 5*100=500 ですが、実際の結果は 1000.00 です (小数点はデータ型によるものです)。 トラブルシューティング 実際、SELECT ステートメントの実行順序をある程度理解していれば、返される結果がすべての注文の合計金額である理由をすぐに判断できます。次に、問題のある SQL の実行シーケンスに基づいて問題を分析します。
補足コンテンツ SELECT文の実行順序は次のとおりです。
解決 ページング データをカウントする必要がある場合 (SUM() 関数に加えて、一般的な COUNT()、AVG()、MAX()、および MIN() 関数にもこの問題があります)、サブクエリを使用して処理することを選択できます (PS: ここではメモリ計算は考慮されておらず、目的はデータベースを使用してこの問題を解決することです)。上記の問題の解決策は次のとおりです。 選択 SUM(o.金額) から (選択 「金額」 から 「注文」 `id` で並べ替え 制限5) AS o; 操作の戻り値は 500.00 です。 要約する 以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。 以下もご興味があるかもしれません:
|
<<: Linux を使用して時間指定ファイルが占有するディスク容量を計算する方法
>>: Vueのドラッグスクリーンショット機能を実装する簡単な方法
この記事では、Reactリストバーとショッピングカートコンポーネントの具体的なコードを参考までに紹介...
この記事では、Centos7.4 環境に lamp-php7.0 をインストールする方法について説明...
リスト形式のテキストの展開と折りたたみの実装は参考までに。具体的な内容は以下のとおりです。必要: 1...
目次1 はじめに2 前提条件2.1 データ型2.2 それが自身のプロパティであるかどうかを判断する ...
指定されたテーブルからデータをエクスポートするMySQLの詳細な説明必要とする: 1. テーブルはす...
目次序文:実装手順:完全なソースコード:詳細情報:序文: vueでは、デフォルトページを実装し、di...
同じコマンドを複数回実行するさまざまな種類のループについて学習しましょう。 awk スクリプトには、...
3回の暗記により、大量の資材の正確な場所と目的を記憶でき、その使いやすさが向上します。 これは単なる...
Linux コマンドの学習は、ほとんどの初心者にとって最大の障害です。今日は、Linux システムで...
ps: 環境はタイトル通りです依存関係をインストールする yum インストール openssl-de...
目次1. Dockerのセキュリティ問題2. Dockerアーキテクチャの欠陥とセキュリティメカニズ...
アプリケーションシナリオデータ テーブルでは、アプリケーションは各データがいつ作成されたかを記録する...
# 以下の例は x64 ビット ランタイム v3.0.0 用です mkdir /runtimes ...
本番環境におけるコンテナの稼働状況を監視することは非常に重要です。監視を通じて、コンテナの稼働状況を...
目次JSBridgeの起源JSBridgeの双方向通信原理JSはネイティブを呼び出すネイティブコール...