3つの一般的なSQLの高度な使用法(高度の章)

上の学習コアの声明に基づき、より複雑な解析問題を処理するためにSQL文を使用する方法での見てみましょう。実際には、マスターSQL文、および3つの共通コアの高度な使用は仕事の80%をカバーするためにSQLを使用する必要があります。データアナリストとして、我々は多層複雑なロジックステートメントを構築する能力、それによって、作業プロセスをより効率的な出力データ解析を簡素化し、意識的な最適化に基づいてSQL文を使用して熟練を必要としています。

ここに画像を挿入説明

本节概要:

1.サブクエリ
2.条件文
3.SQL文の最適化

学習目標:

1.ビルド多層、複雑な論理文、スループットのデータ分析は、ワークフロー合理化するための
SQL文の最適化の意識を入手2.、より効率的かつ専門的なアナリストになります

(A)SQL高度な使用法 - サブクエリ

サブクエリの役割は:解答へのプロセスのニーズを簡素化し、複雑なロジックを構築します

サブクエリとは何ですか?

  1. 我々はさらに、クエリ文のクエリ構築し、フィルタ基準またはデータソースを
  2. 問題解決のプロセスを簡素化するためにSQLを使用して、複雑なSQLステートメントを構築するために使用

使用法:

1.句は、完全なSQL文です
句囲む2.括弧()
複雑な問題へ3.複数のサブステートメントソリューションを

DESCRIBE `产品信息`
__

产品号码	int(11)
产品名称	varchar(256)
供应商号码	int(11)
产品单价	decimal(12,2)
产品描述	varchar(256)

# 示例:单行单列过滤条件子查询
SELECT
	*
FROM `产品信息`

WHERE `产品单价` >= 0.5 * (SELECT MAX('产品单价') as `最高单价` FROM `产品信息`) 

サブクエリカテゴリ:

  • シングル別々のフィルタ条件サブクエリ:単一の別々のサブクエリが結果として値を返します

  • 行と列のフィルタ条件サブ問合せ:サブクエリは、複数行の結果として、単一の列の値を返します

  • プロテーブルサブクエリ:サブクエリが結果として一時リスト(行と列)を返します。

(1)別のサブクエリフィルタ

単一の別々のサブクエリフィルタの条件は何ですか?

  • 句復帰動作の結果として単一の値(データの行)
  • その後のフィルタのためのSQL WHERE句のデメリット

なぜ、単一の独立したサブクエリフィルタ条件?

  • フィルタ条件を構築するためのデータテーブルを使用して
  • 質問に答えるのプロセスを簡素化するための操作手順を軽減SQL -

------

需要のケースの背景:

ケース:リストのすべての製品は、より高い価格や製品価格の詳細情報製品の最高50%に等しい
需要の解体:

  • 最終的な結果が返されます。商品の詳細
  • データ列のフィルタリング:単価
  • フィルタ:最高の単価が50%以上

製品情報シート:データの場所を決定します
ここに画像を挿入説明


# 普通SQL语句解答过程和思路

## 第一步:查询产品最高售价,手动记录最高推荐售价
SELECT
	MAX(`产品单价`) AS `最高单价`
FROM `产品信息`

## 第二步:使用记住的最高推荐售价构建SQL语句解答问题
SELECT *
FROM `产品信息` WHERE `产品单价` >= 0.5 *97

# 单行单列过滤条件子查询解答思路&过程

## 使用查询产品最高价作为子句来直接构建主句中的WHERE过滤条件
## 单个SQL语句解决问题

SELECT
	* 
FROM
	`产品信息` 
WHERE
	`产品单价` >= 0.5 * ( SELECT MAX( `产品单价` ) AS '最高单价' FROM `产品信息` )

# 主查询语句/子查询语句

(2)行と列のフィルタ条件のサブクエリ
ここに画像を挿入説明

ケース:サプライ製品情報の詳細をすべてリスト広東サプライヤーを

解体需要:

  • 最終的な結果が返されます。商品の詳細情報
  • フィルタデータ列:ベンダ情報
  • フィルタ:広東サプライヤー

データを検索します。

  • 製品情報シート
    • 製品情報シートのみベンダー番号、無州の情報
  • サプライヤーデータ情報テーブル
    • サプライヤー情報テーブルは、情報サプライヤ番号と地方が含まれています

ソリューション:使用の製品情報シート内のデータをフィルタリングするための独立した複数行のサブクエリビルダ声明

  • ベンダー供給番号を取得するために広東省の省におけるベンダー情報テーブルを用いて情報
  • 得られた数は、サプライヤーである複数行の単一データ
SELECT
`供应商号码`
FROM `供应商信息` WHERE `省份`= '广东省'

——————————
供应商号码
1
3
10
11
...
________
# 使用多行单列子查询构建语句来过滤产品信息表中的数据

SELECT
	* 
FROM
	`产品信息` 
WHERE
	`供应商号码` IN ( SELECT `供应商号码` FROM `供应商信息` WHERE `省份` = '广东省' )

(3)プロのテーブルサブクエリ

はじめに:

  • 一時テーブルのサブクエリとは何ですか

    • RESULT句は、一時的なリストを構成します
    • その後の一時テーブルのサブクエリのためのSQL文の暫定リスト
  • なぜべきで一時テーブルのサブクエリ

    • 声明の中で、多段階の計算ロジックを完了
    • 制約確定申告結果

ケースには、背景を必要とする:製品のサプライヤーの数の数にリストアップ

解体需要:

  • 最終的な結果が返されますサプライヤー数
  • データのフィルタリング:製品の数
  • フィルタ:アップ

データの場所を確認します。

  • 製品データシート

ソリューション:

  • 製品供給重合(GROUP BY)および集計関数(COUNT)の数を計算します
  • ソートによる製品のサプライヤーの数と製品の数の最大数(ORDER BY)を取得し、(LIMIT)を選択することができます
  • 要件SQL文の戻りは唯一のベンダー数

コードの実装:

# 业务目标:列出产品数目最多的供应商号码

## 使用临时子查询语句选择供应商号码
### 使用聚合语句作为子语句与AS关键字创建临时列表 'a'
### 使用SELECT语句选择供应商号码

SELECT
`供应商号码`
FROM
(
SELECT 
`供应商号码`,
COUNT(`产品号码`) AS `产品数目`

FROM `产品信息`
GROUP BY `供应商号码`
ORDER BY `产品数目` DESC
LIMIT 1
) AS a  # Every derived table must have its own alias

ここに画像を挿入説明

サブクエリの概要:

  • サブクエリの役割は:解答へのプロセスのニーズを簡素化し、複雑なロジックを構築します
  • サブクエリは、単一の別個のフィルタ条件:サブクエリが返す単一の別個の結果として値を
  • マルチライン単一のサブクエリフィルタ基準:リターン単一の列の複数の行結果値
  • プロのテーブルサブクエリは:副問合せは、一時リスト(返す行と列を結果として)

(二)、SQL高度な使用法 - 条件付きステートメント

はじめに:
条件は何ですか?

  • もし...そして...(例:顧客の総消費量が5000以上である、クライアントがVIP顧客です)
  • 同一の判定条件文で、へ決意条件が複数存在してもよいです

条件文

CASE
THEN決意条件の決意の結果
[THEN決意条件決意結果]
ELSEデフォルト値
END

**例:すべての顧客の消費の総量に基づいて、消費の**計算レベル

ステップ1:必要なデータテーブルを決定します(あなたは、データ・ディクショナリとER図に基づいて必要なデータテーブルを見つけることができます) - 「オーダー情報テーブル」

ステップ2:定義消費の異なるレベルを

インターバル顧客が総支出によると、顧客の消費レベルを計算します。

消費者の範囲 消費者レベル
5000に等しいより大きい VIP3
2000-4999 VIP2
1000-1999 VIP1
1000未満 一般

第三段階:結果を得るために条件文を書きます

# 计算顾客总消费金额

SELECT
	`顾客号码`,
	SUM( `消费金额` ) AS `总消费金额` 
FROM
	`订单信息` 
GROUP BY
	`顾客号码`

-------

顾客号码 总消费金额
1	4596.2
2	1402.95
3	7515.35
4	13806.5
5	26968.15
6	3239.8

————————————————

# 根据总消费

# 计算总消费金额
SELECT
	`顾客号码`,
CASE	
	WHEN `总消费金额` >= 5000 THEN 'VIP3' 
	WHEN `总消费金额` >= 2000  THEN 'VIP2' 
	WHEN `总消费金额` >= 1000 THEN 'VIP1'
	ELSE '普通' 
END AS `消费级别` 
FROM
	( SELECT `顾客号码`, SUM( `消费金额` ) AS `总消费金额` FROM `订单信息` GROUP BY `顾客号码` ) AS a #Every derived table must have its own alias

------
顾客号码 消费级别

1	VIP2
2	VIP1
3	VIP3
4	VIP3
5	VIP3

注:既存のデータ列に基づいてデータを変換するために使用する条件文の作成、新しいデータ

(三)、SQL高度な使用法 - SQL文の最適化

  • クエリが返すすべてのデータに使用することは避けてください*
  • 可能な場合は、代わりの間に使用してのフィルタで計算書、
  • テーブル内の元のデータの優先度データを用いて句は、重合は、次いで濾別した重合ステートメントで
  • サブクエリステートメントでは、可能な限り、最終的な実行中(ORDER BY)
公開された17元の記事 ウォン称賛10 ビュー1674

おすすめ

転載: blog.csdn.net/weixin_44976611/article/details/104838146