交叉連接(CROSS JOIN)的實際應用

一次偶然的機會,使用到了萬年不用的交叉連接(CROSS JOIN)

業務場景如下:

1、存在多個運營商,每個運營商下面都有各種類型的設備,不同運營商的設備不完全相同;

2、任何設備有且僅有兩種用途‘訂購’、‘置換’

3、現在要統計發生了‘訂購’、‘置換’操作運營商的訂購數和置換數

思路:

先用交叉連接把所有存在訂購和置換的運營商和設備組合查詢出來(這里把運營商表和設備表交叉連接起來也是一樣)

再過濾掉無數據的組合

各運營商各設備的訂購數如圖

各運營商各設備的置換數如圖

統計結果如下

SQL如下(可直接運行)

WITH a AS(
SELECT 'o1' 運營商,'s1' 設備,'10' 訂購數 FROM dual
UNION ALL
SELECT 'o1', 's2', '15' FROM dual
UNION ALL
SELECT 'o1', 's3', '20' FROM dual
UNION ALL
SELECT 'o2', 's1', '30' FROM dual
UNION ALL
SELECT 'o2', 's2', '35' FROM dual
),
b AS(
SELECT 'o1' 運營商,'s1' 設備,'10' 置換數 FROM dual
UNION ALL
SELECT 'o1', 's2', '15' FROM dual
UNION ALL
SELECT 'o2', 's4', '20' FROM dual
UNION ALL
SELECT 'o2', 's1', '30' FROM dual
UNION ALL
SELECT 'o4', 's2', '35' FROM dual
),
op AS(
SELECT a.運營商 FROM a
UNION
SELECT b.運營商 FROM b
),
sb AS(
SELECT a.設備 FROM a
UNION
SELECT b.設備 FROM b
),
opsb AS(
SELECT DISTINCT op.運營商,sb.設備 FROM op
CROSS JOIN sb)
SELECT opsb.運營商,opsb.設備,NVL(a.訂購數,0) 訂購數,NVL(b.置換數,0) 置換數 
FROM opsb
LEFT JOIN a ON a.運營商 = opsb.運營商 AND a.設備 = opsb.設備
LEFT JOIN b ON b.運營商 = opsb.運營商 AND b.設備 = opsb.設備
WHERE 訂購數 IS NOT NULL 
OR 置換數 IS NOT NULL

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/273290.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/273290.shtml
英文地址,請注明出處:http://en.pswp.cn/news/273290.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Atitit.操作注冊表 樹形數據庫 注冊表的歷史 java版本類庫總結

Atitit.操作注冊表 樹形數據庫 注冊表的歷史 java版本類庫總結 1. 注冊表是樹形數據庫 1 2. 注冊表的由來 1 3. Java 操作注冊表 2 3.1. 使用Preferences API (限定訪問路徑了) 2 3.2. 使用JNI 3 3.3. Jregistrykey 推薦 4 3.4. Jregistry 4 4. org.ope…

C# xml文件讀取與修改

c#讀寫xml文件已知有一個XML文件&#xff08;bookstore.xml&#xff09;如下&#xff1a; Code<?xml version"1.0" encoding"gb2312"?><bookstore> <book genre"fantasy" ISBN"2-3631-4"> <title>Obero…

外連接從表過濾

1、使用left join時從表的過濾 WITH a AS( SELECT A aid FROM dual UNION ALL SELECT B FROM dual UNION ALL SELECT C FROM dual UNION ALL SELECT D FROM dual UNION ALL SELECT E FROM dual ), b AS( SELECT A aid,10 num,1 type FROM dual UNION ALL SELECT B,20,2 FROM d…

php pcntl 多進程學習

1、捕獲子進程退出&#xff08;監聽SIGCHLD信號&#xff0c;然后調用 pcntl_wait 函數&#xff09; declare(ticks1);pcntl_signal(SIGCHLD, "sig_handler"); function sig_handler($signo) {switch ($signo) {case SIGCHLD:$status 0;$child_id pcntl_wait($statu…

Oracle取最大/最小值函數

SELECT greatest(DATE2020-01-01,DATE2020-01-03,DATE2020-01-05,DATE2020-01-07,DATE2020-01-09) 最大值, least(1,3,5,7,9) 最小值 FROM dual; SELECT 1 FROM dual WHERE greatest(1,3,5,7,9) > 8;

ORACLE將查詢字段指定為某種類型

SELECT CAST(張三 AS VARCHAR2(20)) name FROM dual; 一般來說在查詢時很少有用到這種語句&#xff0c;但是使用CREATE TABLE ... AS SELECT ...語句的時候這個就很好用了 --建表 CREATE TABLE test01 AS SELECT 張三 name FROM dual; --正常插入數據 INSERT INTO test01 SEL…

Less Css 教程

http://www.w3cplus.com/css/less&#xff0c;這個東西太吊了&#xff01;轉載于:https://www.cnblogs.com/wln3344/p/4479014.html

分組查詢最晚一條數據(ORACLE)

現有客戶表&#xff0c;交費表&#xff0c;需查詢每個存在交費記錄客戶的最后一筆交費信息 這里提供兩種方式 注&#xff1a;客戶不會在同一時間有兩條交費&#xff0c;SQL可直接執行 --查詢客戶名稱&#xff0c;最后一筆交費時間&#xff0c;以及最后一筆交費金額 WITH --客…

ORACLE循環中使用序列

在批量生成數據時&#xff0c;經常會用到序列的Nextval&#xff0c;今天碰到了這樣的情況&#xff0c;日常記錄&#xff0c;下附解決方案。先看這段腳本 DECLARE i INTEGER; BEGINFOR cur IN 1..5 LOOPi : DomainObjectId.Nextval;dbms_output.put_line(i);END LOOP; END; 編…

常用的機器學習數據挖掘知識點【轉】

轉自&#xff1a; 【基礎】常用的機器學習&數據挖掘知識點 Basis(基礎)&#xff1a; MSE(Mean Square Error 均方誤差)&#xff0c;LMS(LeastMean Square 最小均方)&#xff0c;LSM(Least Square Methods 最小二乘法)&#xff0c;MLE(MaximumLikelihood Estimation最大似然…

tomcat運行問題解決方法

早上過來遇到一個非常奇怪的問題&#xff0c;運行一個新的項目&#xff0c;運行環境都沒問題&#xff0c;可是在調試的時候&#xff0c;總是出錯。 錯誤代碼&#xff1a; log4j:WARN No appenders could be found for logger log4j:WARN Please initialize the log4j system p…

團隊開發——沖刺1.d

沖刺階段一&#xff08;第四天&#xff09; 1、昨天做了什么&#xff1f; 完成部分界面設置&#xff0c;補充三層難度界面、游戲結束界面。 2、今天準備做什么&#xff1f; 優化界面細節。查看C#資料&#xff0c;再解決自己電腦的問題。 3、遇到什么困難&#xff1f; 已經固定好…

10. javacript高級程序設計-DOM

1. DOM DOM(文檔對象模型)是針對HTML和XML文檔的一個API&#xff08;應用程序接口&#xff09; 1.1 節點層次 DOM可以將任何HTML和XML文檔描繪成一個由多層節點構成的結構。節點分為幾種不同的類型&#xff0c;每種類型分別表示文檔中不同的信息及標記。 1.1.1 Node類型 DOM1中…

hdu 5045 Contest(狀態壓縮DP)

題解&#xff1a;我們使用一個二位數組dp[i][j]記錄進行到第i個任務時&#xff0c;人組合為j時的最大和&#xff08;這里的j我們用二進制的每位相應一個人&#xff09;。 詳細見代碼&#xff1a; #include <iostream> #include <cstdio> #include <cstring> …

mysql001創建數據庫

-- 注釋&#xff0c;ctrl/ -- 查詢所有數據庫&#xff1b; show DATABASES; -- 創建數據庫; CREATE DATABASE studb; -- 切換數據庫; USE studb; -- 刪除數據庫 DROP DATABASE studb;

mysql002創建表

-- 創建student表 DDL CREATE TABLE stdent( sno int(3), name VARCHAR(55), sex CHAR(2), age int, dtdate date, classname VARCHAR(55), email VARCHAR(55) ) -- 查詢表中數據 DQL SELECT * FROM stdent;

oc基礎-self關鍵字的使用

#import <Foundation/Foundation.h>interface Student : NSObject {int _age;char *_name; } - (void) study; - (void) run; (void) play;(void) run; endimplementation Student - (void) study {NSLog("%s在學習",self->_name);[self run];//若在此調用…

mysql003操作表DDL

-- 查詢表中數據 DQL 注意在mydb數據庫下面 SELECT * FROM stdent; -- 在表中添加一列 DDL -- 新增列 默認添加到最后 ALTER TABLE stdent add score DOUBLE(4,1); -- 新增一列 在表中開頭添加 ALTER TABLE stdent add score2 double(5,1) first; -- 在指定列后面添…

Google Guava學習筆記——基礎工具類Joiner的使用

Guava 中有一些基礎的工具類&#xff0c;如下所列&#xff1a; 1&#xff0c;Joiner 類&#xff1a;根據給定的分隔符把字符串連接到一起。MapJoiner 執行相同的操作&#xff0c;但是針對 Map 的 key 和 value。 2&#xff0c;Splitter 類&#xff1a;與 Joiner 操作相反的類&a…

xampp 無法啟動mysql

Error: could not open single-table tablespace file .\test\dr.ibd 在網上搜索到的解決方案都不管用。結果整合了兩個解決方案&#xff1a; 刪掉xampp/data/ib_logfile0 xampp/data/ib_logfile1 xampp/data/ibdata1 三個文件就好了轉載于:https://www.cnblogs.com/fyydnz/p/4…