MySQL 之開放架構
此處用到了Pivoting技術
注:Pivoting技術是指一種可以把行轉換為列的技術,在Pivoting的執行過程中可能會用到聚合。
這裡討論的都是靜態Pivoting查詢,即使用者需要提前知道旋轉的屬性列的值,對於動態Pivoting,需要動態地構造查詢字串。
若想對這種架構設計的表進行新增、修改或者刪除表和列時,只需要透過insert、update、delete來操作便可完成邏輯架構的更改
但是透過這種方法,可能無法保證其他RDBMS的特性無法使用,比如完整性約束、SQL最佳化等
首先建立這樣的一個表
插入以下測試資料
開放架構表open_schema的內容為:(透過select *查詢的結果)
如果要查詢得出以下結果,需要用到Pivoting技術(需要和聚合一起用)
首先要確定結果的行數和表中行數的關係,對於此表,可以透過id來獲得分組:
解決方案:
注:Pivoting技術是指一種可以把行轉換為列的技術,在Pivoting的執行過程中可能會用到聚合。
這裡討論的都是靜態Pivoting查詢,即使用者需要提前知道旋轉的屬性列的值,對於動態Pivoting,需要動態地構造查詢字串。
若想對這種架構設計的表進行新增、修改或者刪除表和列時,只需要透過insert、update、delete來操作便可完成邏輯架構的更改
但是透過這種方法,可能無法保證其他RDBMS的特性無法使用,比如完整性約束、SQL最佳化等
首先建立這樣的一個表
-
create table open_schema(
-
id int,
-
attribute varchar(10),
-
value varchar(20),
- primary key(id,attribute));
插入以下測試資料
-
insert into open_schema select 1,'attr1','110930001';
-
insert into open_schema select 2,'attr1','110930002';
-
insert into open_schema select 3,'attr1','110930003';
-
insert into open_schema select 1,'attr2','AAA';
-
insert into open_schema select 2,'attr2','BBB';
-
insert into open_schema select 3,'attr2','CCC';
-
insert into open_schema select 1,'attr3','M';
-
insert into open_schema select 2,'attr3','M';
-
insert into open_schema select 3,'attr3','F';
-
insert into open_schema select 1,'attr4','1990-01-01';
-
insert into open_schema select 2,'attr4','1990-02-01';
-
insert into open_schema select 3,'attr4','1990-03-01';
-
insert into open_schema select 1,'attr5','18600000000';
-
insert into open_schema select 2,'attr5','18611111111';
- insert into open_schema select 3,'attr5','18622222222';
開放架構表open_schema的內容為:(透過select *查詢的結果)
如果要查詢得出以下結果,需要用到Pivoting技術(需要和聚合一起用)
首先要確定結果的行數和表中行數的關係,對於此表,可以透過id來獲得分組:
解決方案:
-
select id, max(case when attribute='attr1' then value end) as sno,
-
max(case when attribute='attr2' then value end) as name,
-
max(case when attribute='attr3' then value end) as sex,
-
max(case when attribute='attr4' then value end) as birthdate,
-
max(case when attribute='attr5' then value end) as tel
-
from open_schema
- group by id;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29773961/viewspace-1248570/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SaaS架構:開放平臺架構設計架構
- 開放平臺架構指南架構
- MySQL 高可用架構之 MMM 架構MySql架構
- 精通MySQL之架構篇MySql架構
- MySQL之基礎架構MySql架構
- 一個開放平臺架構的思考架構
- mysql學習之-邏輯架構MySql架構
- Biztalk 開發之架構架構
- MySQL高可用架構之Keepalived+主從架構部署MySql架構
- 開放平臺選用什麼架構好?架構
- Mysql之讀寫分離架構-AtlasMySql架構
- MySQL 實現高可用架構之 MHAMySql架構
- MySQL高可用架構之MHA實踐MySql架構
- MySQL高可用架構之PXC實踐MySql架構
- MySQL架構優化之字符集MySql架構優化
- MySql架構MySql架構
- 架構之:serverless架構架構Server
- MySQL高可用架構之MaxScale實踐MySql架構
- MySQL的架構MySql架構
- Mysql架構理解MySql架構
- 架構之:資料流架構架構
- 前端架構之小小node架構前端架構
- MySQL高可用架構之MHA 原理與實踐MySql架構
- Mysql學習筆記---MySQL叢集架構之擴容方案MySql筆記架構
- [譯] App架構指南之開山篇APP架構
- Taro 3.1 beta 釋出: 開放式架構新增 4 端支援架構
- MySQL系列-- 1.MySQL架構MySql架構
- 【細品架構4/100】架構之架構切分架構
- MySQL體系架構MySql架構
- MySQL基礎架構MySql架構
- mysql叢集架構MySql架構
- MySQL Server架構概述MySqlServer架構
- MySQL 基礎架構MySql架構
- 架構演進之「微服務架構」架構微服務
- 架構之:微服務架構漫談架構微服務
- 架構之:軟體架構漫談架構
- Linux網站架構系列之Mysql----部署篇Linux網站架構MySql
- 基於.NET的LINQ to SQL 三層架構開發之架構建立SQL架構