MySQL 除法問題
此處用到了Pivoting技術
注:Pivoting技術是指一種可以把行轉換為列的技術,在Pivoting的執行過程中可能會用到聚合。
這裡討論的都是靜態Pivoting查詢,即使用者需要提前知道旋轉的屬性列的值,對於動態Pivoting,需要動態地構造查詢字串。
關係除法問題的解決方案:
(當除數集合中的元素數量較小時,Pivoting可以用於解決關係除法問題)
解釋一下:
表devision儲存訂單中包含的產品,比如A訂單所包含的產品ID為1、2、3、4,C訂單所包含的產品ID為3、4,以此類推
Pivoting技術可以把每個訂單中的產品旋轉到單獨的列之中。
比如需要查詢productid為2、3、4的訂單,可以採用以下方法:
得到的結果很顯然:
因為只有A和B訂單包含產品ID為2、3、4的產品
上sql語句中的派生表P輸出結果為:
如果將生成派生表p的語句中的max函式改成count函式,則更加直觀:
及若產品存在則返回為1,不存在則返回為0,而不是null。
注:Pivoting技術是指一種可以把行轉換為列的技術,在Pivoting的執行過程中可能會用到聚合。
這裡討論的都是靜態Pivoting查詢,即使用者需要提前知道旋轉的屬性列的值,對於動態Pivoting,需要動態地構造查詢字串。
關係除法問題的解決方案:
(當除數集合中的元素數量較小時,Pivoting可以用於解決關係除法問題)
-
create table devision(
-
orderid varchar(10) not null,
-
productid int not null,
- primary key(orderid,productid));
-
insert into devision select 'A',1;
-
insert into devision select 'A',2;
-
insert into devision select 'A',3;
-
insert into devision select 'A',4;
-
insert into devision select 'B',2;
-
insert into devision select 'B',3;
-
insert into devision select 'B',4;
-
insert into devision select 'C',3;
-
insert into devision select 'C',4;
- insert into devision select 'D',4;
解釋一下:
表devision儲存訂單中包含的產品,比如A訂單所包含的產品ID為1、2、3、4,C訂單所包含的產品ID為3、4,以此類推
Pivoting技術可以把每個訂單中的產品旋轉到單獨的列之中。
比如需要查詢productid為2、3、4的訂單,可以採用以下方法:
-
select orderid
-
from(select orderid,
-
max(case when productid=2 then 1 end) as p2,
-
max(case when productid=3 then 1 end) as p3,
-
max(case when productid=4 then 1 end) as p4
-
from devision
-
group by orderid
-
) p
- where p2=1 and p3=1 and p4=1;
得到的結果很顯然:
因為只有A和B訂單包含產品ID為2、3、4的產品
上sql語句中的派生表P輸出結果為:
如果將生成派生表p的語句中的max函式改成count函式,則更加直觀:
及若產品存在則返回為1,不存在則返回為0,而不是null。
-
-
select orderid
-
from(select orderid,
-
count(case when productid=2 then 1 end) as p2,
-
count(case when productid=3 then 1 end) as p3,
-
count(case when productid=4 then 1 end) as p4
-
from devision
-
group by orderid
-
) p
- where p2=1 and p3=1 and p4=1;
-
select orderid
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29773961/viewspace-1255297/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL 問題MySql
- MySQL range問題MySql
- mysql 轉義問題MySql
- MySQL死鎖問題MySql
- MySQL行號問題MySql
- MySQL大小寫問題MySql
- mysql常見問題MySql
- MySQL 常見問題MySql
- mysql亂碼問題MySql
- mysql的中文問題MySql
- mysql 遇到的問題MySql
- Mysql:常見問題MySql
- MySQL訪問受限的問題分析MySql
- 急問:mysql出現的問題MySql
- MySQL 死鎖問題分析MySql
- mysql 1130 問題MySql
- MySQL許可權問題MySql
- MySQL 大欄位問題MySql
- mysql checksum 報錯問題。MySql
- MySQL SSL連線問題MySql
- mysql 大小寫敏感問題MySql
- mysql 1067問題MySql
- Mysql show processlist 排查問題MySql
- mysql併發操作問題MySql
- MySQL年齡日期問題MySql
- mysql 依賴包問題MySql
- MySQL 缺失範圍問題MySql
- MySQL 最小缺失值問題MySql
- MySQL ROLLUP和CUBE問題MySql
- MySQL 計算生日問題MySql
- 4.MYSQL問題集MySql
- mysql批次建表問題MySql
- Mysql 左連結問題MySql
- jive 連線 mysql 問題MySql
- mysql多版本共存問題MySql
- 【Mysql】關於mysql存入emoji表情的問題MySql
- MySQL:一個特殊的問題MySql
- mysql 刪表引出的問題MySql