SQLSERVER中union,cube,rollup,cumpute运算符使用说明
union,cube,rollup,cumpute运算符的使用技巧。
/*--1 UNION 运算符是将两个或更多查询的结果组合为单个结果集
使用 UNION 组合查询的结果集有两个最基本的规则:
1。所有查询中的列数和列的顺序必须相同。
2。数据类型必须兼容
a.UNION的结果集列名与第一个select语句中的结果集中的列名相同,其他select语句的结果集列名被忽略
b.默认情况下,UNION 运算符是从结果集中删除重复行。如果使用all关键字,那么结果集将包含所有行并且不删除重复行
c.sql是从左到右对包含UNION 运算符的语句进行取值,使用括号可以改变求值顺序
--例如:
*/
select * from tablea
union all
(
select * from tableb
union all
select * from tablec
)
/*
这样就可以先对tableb和tablec合并,再合并tablea
d.如果要将合并后的结果集保存到一个新数据表中,那么into语句必须加入到第一条select中
e.只可以在最后一条select语句中使用 order by 和 compute 子句,这样影响到最终合并结果的排序和计数汇总
f.group by 和 having 子句可以在单独一个select查询中使用,它们不影响最终结果
*/
--2 CUBE 汇总数据
/*
CUBE 运算符生成的结果集是多维数据集。多维数据集是事实数据的扩展,事实数据即记录个别事件的数据。
扩展建立在用户打算分析的列上。这些列被称为维。多维数据集是一个结果集,其中包含了各维度的所有可能组合的交叉表格。
CUBE 运算符在 SELECT 语句的 GROUP BY 子句中指定。该语句的选择列表应包含维度列和聚合函数表达式。
GROUP BY 应指定维度列和关键字 WITH CUBE。结果集将包含维度列中各值的所有可能组合,以及与这些维度值组合相匹配的基础行中的聚合值。
*/
--下列查询返回的结果集中,将包含 Item 和 Color 的所有可能组合的 Quantity 小计:
-->Title:生成測試數據
-->Author:wufeng4552
-->Date :2009-09-10 14:36:20
if not object_id('Tempdb..#t') is null
drop table #t
Go
Create table #t([Item] nvarchar(5),[Color] nvarchar(4),[Quantity] int)
Insert #t
select N'Table',N'Blue',124 union all
select N'Table',N'Red',223 union all
select N'Chair',N'Blue',101 union all
select N'Chair',N'Red',210
Go
select [Item],
[Color],
sum([Quantity])[Quantity]
from #t group by [Item],[Color] with cube
/*
Item Color Quantity
----- ----- -----------
Chair Blue 101
Chair Red 210
Chair NULL 311
Table Blue 124
Table Red 223
Table NULL 347
NULL NULL 658
NULL Blue 225
NULL Red 433
*/
/*CUBE 操作所生成的空值带来一个问题:如何区分 CUBE 操作所生成的 NULL 值和从实际数据中返回的 NULL 值?
这个问题可用 GROUPING 函数解决。
如果列中的值来自事实数据,则 GROUPING 函数返回 0;如果列中的值是 CUBE 操作所生成的 NULL,则返回 1。
在 CUBE 操作中,所生成的 NULL 代表全体值。可将 SELECT 语句写成使用 GROUPING 函数将所生成的 NULL 替换为字符串 ALL。
因为事实数据中的 NULL 表明数据值未知,所以 SELECT 语句还可译码为返回字符串 UNKNOWN 替代来自事实数据的 NULL。
例如:
*/
-->Title:生成測試數據
-->Author:wufeng4552
-->Date :2009-09-10 14:36:20
if not object_id('Tempdb..#t') is null
drop table #t
Go
Create table #t([Item] nvarchar(5),[Color] nvarchar(4),[Quantity] int)
Insert #t
select N'Table',N'Blue',124 union all
select N'Table',N'Red',223 union all
select N'Chair',N'Blue',101 union all
select N'Chair',N'Red',210
Go
select [Item]=case when grouping([Item])=1 then 'ALL' else isnull(Item, 'UNKNOWN')end,
[Color]=case when grouping([Color])=1 then 'ALL' else isnull([Color],'UNKNOWN')end,
sum([Quantity])[Quantity]
from #t group by [Item],[Color] with cube
/*
Item Color Quantity
----- ----- -----------
Chair Blue 101
Chair Red 210
Chair ALL 311
Table Blue 124
Table Red 223
Table ALL 347
ALL ALL 658
ALL Blue 225
ALL Red 433
(9 個資料列受到影響)
*/
/*
包含带有许多维度的 CUBE 的 SELECT 语句可能生成很大的结果集,因为这些语句会为所有维度中值的所有组合生成行。
这些大结果集包含的数据可能过多而不易于阅读和理解。这个问题有一种解决办法是将 SELECT 语句放在视图中:
*/
create view view_cube
as
select [Item]=case when grouping([Item])=1 then 'ALL' else isnull(Item, 'UNKNOWN')end,
[Color]=case when grouping([Color])=1 then 'ALL' else isnull([Color],'UNKNOWN')end,
sum([Quantity])[Quantity]
from tb group by [Item],[Color] with cube --視圖中不能用臨時表,故改之
--然后即可用该视图来只查询您感兴趣的维度值:
SELECT *
FROM InvCube
WHERE Item = 'Chair' AND Color = 'ALL'
/*
Item Color QtySum
-------------------- -------------------- ---------
Chair ALL 311.00
*/
--3 ROLLUP 汇总数据
/*
用 ROLLUP 汇总数据在生成包含小计和合计的报表时,ROLLUP 运算符很有用。
ROLLUP 运算符生成的结果集类似于 CUBE 运算符所生成的结果集。
CUBE 和 ROLLUP 之间的区别在于: CUBE 生成的结果集显示了所选列中值的所有组合的聚合。
ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。 例如,简单表 #t
中包含:Item Color Quantity
*/
select [Item]=case when grouping([Item])=1 then 'ALL' else isnull(Item, 'UNKNOWN')end,
[Color]=case when grouping([Color])=1 then 'ALL' else isnull([Color],'UNKNOWN')end,
sum([Quantity])[Quantity]
from #t group by [Item],[Color] with rollup
/*
Item Color Quantity
----- ----- -----------
Chair Blue 101
Chair Red 210
Chair ALL 311
Table Blue 124
Table Red 223
Table ALL 347
ALL ALL 658
(7 個資料列受到影響)
*/
/*
如果查询中的 ROLLUP 关键字更改为 CUBE,那么 CUBE 结果集与上述结果相同,只是在结果集的末尾还会返回下列两行:ALL Blue 225.00
ALL Red 433.00
CUBE 操作为 Item 和 Color 中值的可能组合生成行。
例如,CUBE 不仅报告与 Item 值 Chair 相组合的 Color 值的所有可能组合(Red、Blue 和 Red + Blue),
而且报告与 Color 值 Red 相组合的 Item 值的所有可能组合(Chair、Table 和 Chair + Table)。
对于 GROUP BY 子句中右边的列中的每个值,ROLLUP 操作并不报告左边一列(或左边各列)中值的所有可能组合。例如,
ROLLUP 并不对每个 Color 值报告 Item 值的所有可能组合。
ROLLUP 操作的结果集具有类似于 COMPUTE BY 所返回结果集的功能;然而,ROLLUP 具有下列优点: ROLLUP 返回单个结果集;COMPUTE BY 返回多个结果集,而多个结果集会增加应用程序代码的复杂性。
ROLLUP 可以在服务器游标中使用;COMPUTE BY 不可以。
有时,查询优化器为 ROLLUP 生成的执行计划比为 COMPUTE BY 生成的更为高效。
*/

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









C 言語での Union の使用は、異なるデータ型を同じメモリ位置に格納できるようにする特別なデータ型です。Union を使用すると、メモリ領域を節約し、異なるデータ型間の変換を容易にすることができます。 Union を使用する場合は、対応するメンバーが有効であり、同時にアクセスできるメンバーは 1 つだけであることに注意する必要があります。

MySQL で FULLOUTERJOIN 関数を使用して 2 つのテーブルの結合を取得する方法 MySQL の FULLOUTERJOIN 関数は、内部結合と外部結合を組み合わせた強力な結合操作です。これを使用すると、2 つのテーブルの和集合を取得できます。つまり、2 つのテーブル内のすべてのデータを 1 つの結果セットに結合できます。この記事では、FULLOUTERJOIN 関数の使用法を紹介し、読者の理解を深めるためにいくつかのサンプル コードを提供します。 FULLOUTERJOIN関数

1. ユニオンは複数テーブル接続クエリの手法ではなく、複数のクエリ文のクエリ結果を 1 つの結果に結合し、重複データを削除します。 2. 全外部結合は、左のテーブルと右のテーブルのデータを問い合わせて、接続条件に従って接続します。例 #左外側の Aunion と右外側の BSELECT*FROMt_categorycLEFTOUTERJOINt_productpONc.cid=p.cnounionSELECT*FROMt_categorycRIGHTOUTERJOINt_productpONc.cid=p.cno を使用する

データ本体の共存を実装するための Union クラスを定義します。C/C++ 言語では、ユニオン (ユニオンとも呼ばれます) は、構造体に似たデータ構造です。構造体と同様に、共用体には多くのデータ型と変数を含めることができます。両者の違いは次のとおりです: 構造体のすべての変数は「共存」し、すべての変数は同時に有効になります。各変数は異なるメモリ空間を占有します。共用体では、各変数は「相互に排他的」であり、同時に有効なのは 1 つの変数だけであり、すべての変数が同じメモリ空間を占有します。複数のデータがメモリを共有する必要がある場合、または一度に複数のデータのうち 1 つだけを取得する必要がある場合は、共用体を使用できます。 Javaで

2024 年 3 月 11 日、EclipseLabs は、Placeholder と HackVC が共同主導した 5,000 万ドルのシリーズ A 資金調達の完了を発表しました。 2022 年に、Eclipse はプレシードおよびシードラウンドの資金調達で 1,500 万米ドルを完了し、評価額は 1 億米ドルを超えました。現在、このプロジェクトの累計融資額は6,500万米ドルに達しています。 Eclipseの目標は、核となる利点を備えたロールアッププラットフォームを構築することであり、ブロックチェーンテクノロジーの互換性、セキュリティ、スケーラビリティを強化することを目的としていると言われています。 Eclipseプロジェクトについては以下で詳しく紹介します。 Eclipse の中心テーマ: Solana Virtual Machine (SVM) のパフォーマンスを通じてより強力な La を構築する

Union を使用して Like ステートメントを最適化する 1) 場合によっては、クエリ内の比較に or 演算子を使用する必要があります。 or キーワードが where 句で頻繁に使用されすぎると、MySQL オプティマイザがレコードを取得するために誤ってフル テーブル スキャンを選択する可能性があります。 Union 句を使用すると、特にクエリの一方に最適化されたインデックスがあり、もう一方のクエリにも最適化されたインデックスがある場合に、クエリの実行が高速になります。たとえば、first_name と last_name にそれぞれインデックスがある場合、次のクエリ ステートメントを実行します: mysql>select*fromstudentswherefirst_namelike'A

多くのデータベース アプリケーションでは、複数のデータ ソースからのデータを統合する必要がある状況に直面します。 MySQL の UNION ステートメントは、この状況を解決する方法であり、2 つ以上の SELECT ステートメントの結果セットを 1 つにマージできます。これは非常に便利な機能ですが、UNION ステートメントが最適化されていない場合、システムでパフォーマンスの問題を引き起こす可能性もあります。この記事では、MySQL を通じて UNION を最適化してパフォーマンスを向上させる方法について説明します。 U の使用中に UNIONALL を使用する

作成者: Stanley、KernelVentures 編集者: 0xxz、Golden Finance 1. ロールアップ トラックの背景 1.1 トラックの概要 ロールアップは、レイヤー 2 ソリューションの 1 つであり、イーサリアム メイン ネットワーク (つまりレイヤー 1) 上のトランザクションの計算と保存を処理のためにレイヤー 2 に転送することによって行われます。圧縮されたデータはイーサリアムのメインネットにアップロードされ、イーサリアムのパフォーマンスが向上します。ロールアップの出現により、レイヤー 2 のガス料金がメイン ネットワークのガス料金よりも大幅に安くなり、ガス消費量が節約され、TPS が高速化されるなど、トランザクションとインタラクションがよりスムーズになります。 Arbitrum、Optimism、Base、ZK Rollup など、ローンチされたいくつかの主流のロールアップ チェーン
