統計量に対するmySql SQLクエリ操作

統計量に対するmySql SQLクエリ操作

余計なことは言わないで、コードだけ見てみましょう〜

プロジェクト番号を選択、
sum(case when device_state=0 then 1 else 0 end)as offTotal 、
sum(case when device_state=1 then 1 else 0 end)as onlineTotal,
合計(1)合計
iot_d_deviceから
プロジェクト番号でグループ化
プロジェクト番号で並べ替え 

補足: MySQLは1つのSQL文を使用して複数の統計結果を照会します

モール プロジェクトでは、ユーザーが自分の個人センター ページでさまざまなステータスの注文数を照会するという問題に必然的に直面することになります。もちろん、この問題は難しくありません。状態を入力パラメータとして受け取り、毎回異なる状態値を渡すことで、対応する状態にある注文の数を順に照会する DAO レイヤー メソッドを作成できます。

今日、H5 インターフェースを書いているときに、別の方法で確認したいと思いました。つまり、1 つの SQL で複数の状態の注文数を照会したいと思いました。ネットで検索して、この方法が実行可能であることがわかったので試してみたところ、期待通りに機能しました。

例は次のとおりです (データは今日の問題を説明するためだけに使用されており、表の設計は厳密ではありません。私を責めないでください)。

FOREIGN_KEY_CHECKS=0 に設定します。
-- ----------------------------
-- mini_test_order のテーブル構造
-- ----------------------------
`mini_test_order` が存在する場合はテーブルを削除します。
テーブル「mini_test_order」を作成します(
 `id` int(11) NULLではない、
 `order_no` varchar(32) デフォルト NULL コメント '注文番号',
 `user_id` int(11) デフォルト NULL コメント 'ユーザーID',
 `shop_id` int(11) デフォルト NULL コメント '販売者ID',
 `order_status` tinyint(1) デフォルト NULL コメント '注文ステータス',
 `create_time` int(10) DEFAULT NULL COMMENT '作成時刻',
 主キー (`id`)
)ENGINE=InnoDB デフォルト文字セット=utf8;
-- ----------------------------
-- mini_test_order の記録
-- ----------------------------
`mini_test_order` に値 ('1'、'aaaaaaaaa'、'11'、'111'、'1'、'1573041313') を挿入します。
`mini_test_order` に値 ('2'、'bbbbbbbb'、'11'、'222'、'1'、'1573041313') を挿入します。
`mini_test_order` に値 ('3'、'cccccccccc'、'11'、'333'、'2'、'1573041313') を挿入します。
`mini_test_order` に値 ('4'、'dddddddd'、'11'、'222'、'3'、'1573041313') を挿入します。
`mini_test_order` に値 ('5'、'eeeeeeeeee'、'11'、'111'、'4'、'1573041313') を挿入します。
`mini_test_order` に値 ('6'、'ffffffffffffff'、'11'、'111'、'3'、'1573041313') を挿入します。
`mini_test_order` に値 ('7'、'gggggggg'、'11'、'222'、'4'、'1573041313') を挿入します。
`mini_test_order` に値 ('8'、'hhhhhhhhh'、'11'、'111'、'4'、'1573041313') を挿入します。
`mini_test_order` に値 ('9'、'iiiiiiiiiiiiiiiiiiiii'、'11'、'333'、'3'、'1573041313') を挿入します。
`mini_test_order` に値 ('10'、'jjjjjjjjjjjjjjjjjjjjj'、'11'、'222'、'1'、'1573041313') を挿入します。

コア SQL ステートメントは次のとおりです。

SELECT COUNT(CASE order_status WHEN 1 THEN 1 END) AS "ステータス 1",COUNT(CASE order_status WHEN 2 THEN 1 END) AS "ステータス 2",COUNT(CASE order_status WHEN 3 THEN 1 END) AS "ステータス 3",COUNT(CASE order_status WHEN 4 THEN 1 END) AS "ステータス 4" FROM `mini_test_order`;

または次のようになります。

SELECT COUNT(CASE WHEN order_status = 1 THEN 1 END) AS "ステータス 1",COUNT(CASE WHEN order_status = 2 THEN 1 END) AS "ステータス 2",COUNT(CASE WHEN order_status = 3 THEN 1 END) AS "ステータス 3",COUNT(CASE WHEN order_status = 4 THEN 1 END) AS "ステータス 4" FROM `mini_test_order`;

もちろん、SQL 文は上記の 2 つの方法に限定されるわけではありません。探索したい方は、補足のメッセージを残してください。

MySQLの場合、2つの構文があります。

1. シンプルな機能

CASE [列名] WHEN [値1] THEN [結果1]…ELSE [デフォルト] END

2. 検索機能

CASE WHEN [式] THEN [結果1]…ELSE [デフォルト] END

両者の違い

前者は、値が条件 value1 を満たす場合に、col_name フィールドのすべての可能な値を列挙します。

後者は判断を記述することができ、検索機能は条件を満たす最初の値のみを返し、他のケースは無視されます。

上記は私の個人的な経験です。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。間違いや不備な点がありましたら、遠慮なくご指摘ください。

以下もご興味があるかもしれません:
  • MySQL 永続統計の詳細な説明
  • MySQL カーディナリティ統計の簡単な分析
  • 生年月日を年齢に変換し、グループ化して人数を数えるMySQLの例
  • MySQL データ量の変化をカウントし、インターフェースアラームを呼び出す Python のサンプルコード
  • MySQL 8.0 の統計が不正確である理由
  • MySql におけるプロセス制御関数/統計関数/グループ化クエリの使用法の分析

<<:  ウェブデザインと制作におけるハイパーリンクの効果の向上

>>:  Linux ディスク領域解放問題の概要

推薦する

CentOS のデフォルトの SSH ポート番号を変更する方法の例

LinuxサーバーのデフォルトのSSHポート番号は通常22なので、ほとんどのユーザーはセキュリティ上...

VUE ユニアプリの基本コンポーネントの簡単な紹介

1. スクロールビュー垂直スクロールを使用する場合は、固定の高さを指定して CSS で高さを設定する...

ファイル共有サーバーを構築するための samba + OPENldap の詳細な説明

ここでは、samba (ファイル共有サービス) v4.9.1 + OPENldap (バックエンド ...

ストリーマーボタンの効果を実現するCSS3アニメーション

CSS3 を学習する過程で、CSS3 属性を使用すると多くのクールな効果を簡単に実現できることが分か...

MySQL ストアド関数(カスタム関数)の定義と使用方法の詳細な説明

ストアド関数ストアド関数とは: SQL コードの一部をカプセル化し、特定の関数を完了して、結果を返し...

VMWare 仮想マシン 15.X LAN ネットワーク構成チュートリアル図

最近、分散型およびビッグデータ技術について学ぶために、いくつかの仮想マシンに取り組んでいます。まず、...

MySQLデータベースのマスタースレーブ同期構成と読み取り書き込み分離

MySQL マスター スレーブ レプリケーションを使用する利点は次のとおりです。 1. 安定性を向上...

ページングのどのページでMySQLのレコードをクエリするか

序文実際には、次のような問題に遭遇する可能性があります。特定のレコードの ID がわかっていて、その...

IDEA を使用して Web プロジェクトを作成し、Tomcat に公開する方法

目次ウェブ開発1. Web開発の概要Tomcatのインストールと設定Tomcatをインストールする2...

WeChatアプレット実装アンカー位置決め機能の例

序文小規模なプログラムの開発では、リストをスクロールして表示する必要性に遭遇することがよくあります。...

javascript:void(0) の意味と使用例

voidキーワードの紹介まず、void キーワードは JavaScript で非常に重要なキーワード...

CSS scroll-snap スクロールイベント停止と要素位置検出の実装

1. スクロールスナップはフロントエンド開発者にとって必須のスキルですCSS スクロール スナップは...

MySQL での varchar 型の日付の比較、並べ替え、その他の操作の実装

MySQL を使用する場合、日付は通常、datetime や timestamp などの形式で保存さ...

生年月日を年齢に変換し、グループ化して人数を数えるMySQLの例

データベースのクエリ `学生`から*を選択 クエリ結果id名前誕生日1張三1970-10-01 2李...

Linux で TCP 接続の最大数をテストする方法

序文TCP サーバの最大同時接続数に関して、「ポート番号の上限が 65535 であるため、TCP サ...