2010-03-04 72 views

回答

12

只是隨機的例子。你有一個城市的表格:Id,Lat,Lon,Name。你想顯示一個城市到另一個城市的距離的用戶表。你會寫如

SELECT c1.Name, c2.Name, SQRT((c1.Lat - c2.Lat) * (c1.Lat - c2.Lat) + (c1.Lon - c2.Lon)*(c1.Lon - c2.Lon)) 
FROM City c1, c2 
+0

是除了地球上的距離,不喜歡的工作,你需要一個大圈做正確 – 2010-03-04 15:24:53

+3

我一直在等待這個表彰:)我完全同意,但例子是關於SQL – Andrey 2010-03-04 15:27:10

1

通常,爲報告生成一個超集。

PosgreSQL

SELECT COALESCE(SUM(sales), 0) 
FROM generate_series(1, 12) month 
CROSS JOIN 
     department d 
LEFT JOIN 
     sales s 
ON  s.department = d.id 
     AND s.month = month 
GROUP BY 
     d.id, month 
3

這裏有兩個例子:

創建發票或其他文件,你可以創建一個臨時表的副本名稱的多個副本,那麼笛卡爾加入該表到實際的發票記錄。結果集將包含發票副本的一個記錄,包括要在頁面頂部或底部的欄中打印的副本的「名稱」或作爲水印。使用這種技術,程序可以向用戶提供複選框,讓他們選擇要打印的副本,甚至允許他們打印用戶輸入副本名稱的「特殊副本」。

CREATE TEMP TABLE tDocCopies (CopyName TEXT(20)) 
INSERT INTO tDocCopies (CopyName) VALUES ('Customer Copy') 
INSERT INTO tDocCopies (CopyName) VALUES ('Office Copy') 
... 
INSERT INTO tDocCopies (CopyName) VALUES ('File Copy') 
SELECT * FROM InvoiceInfo, tDocCopies WHERE InvoiceDate = TODAY() 

創建日曆矩陣,每人每天一個記錄,笛卡爾參加人表包含所有天一個星期,一個月,一年或另一個表。

SELECT People.PeopleID, People.Name, CalDates.CalDate 
    FROM People, CalDates 
0

您可能希望創建使用所有來自兩個查找表的可能組合的報告,以創造與每一個可能結果的值的報告。

考慮bug跟蹤:你有一個表的嚴重程度和另一個用於優先級和要顯示的每個組合的計數。你可能最終是這樣的:

select severity_name, priority_name, count(*) 
from (select severity_id, severity_name, 
      priority_id, priority_name 
     from severity, priority) sp 
     left outer join 
     errors e 
     on e.severity_id = sp.severity_id 
     and e.priority_id = sp.priority_id 
group by severity_name, priority_name 

在這種情況下,笛卡爾嚴重程度和優先級之間的連接提供了可以創建後外連接對主列表。

0

這是我一生中唯一的一次,我已經找到了一個笛卡爾積合法使用。

在最後公司在我工作過,有被要求按季度對確定在每個地理區域使用了什麼樣的常見問題的國家網站,我們在工作報告。

我們的數據庫通過元組(4, x)描述了地理區域(市場),其中4表示層次結構中的層級號碼,並且x表示唯一的marketId

每個FAQ由FaqId標識,每個與FAQ的關聯由複合鍵marketId元組和FaqId定義。這些關聯是通過管理應用程序設置的,但考慮到系統和120個市場中有1000個常見問題解答,創建新常見問題解答時設置初始關聯是一件麻煩事。所以,我們創建了一個默認的市場選擇,並且覆蓋(-1,-1)的一個marketId元組來表示這個。

發回的報道 - 需要顯示每一個常見問題提問/回答並以2D矩陣(我們使用的Excel電子表格)顯示此FAQ市場的報告。我發現,在默認市場選擇案例中,將每個FAQ與每個市場相關聯的最簡單方法是使用此查詢,將爆炸結果與所有其他直接常見問題解答市場關聯結合在一起。

Faq2LevelDefault表格包含所有定義爲默認選擇的市場(我相信它只是一個marketIds列表)。

SELECT FaqId, fld.LevelId, 1 [Exists] 
FROM Faq2Levels fl 
    CROSS JOIN Faq2LevelDefault fld 
WHERE fl.LevelId=-1 and fl.LevelNumber=-1 and fld.LevelNumber=4 
UNION 
SELECT Faqid, LevelId, 1 [Exists] from Faq2Levels WHERE LevelNumber=4 
0

當運行在給定範圍內的每個日期的查詢。例如,對於某個網站,您可能想知道每天有多少用戶在過去的N天內處於活動狀態。您可以運行的每一天在一個循環的查詢,但它是最簡單的把所有的邏輯相同的查詢,並在某些情況下,DB可以優化直角加入了。

1

我已經注意到這個正在做嘗試,系統要麼執行壓力測試或失蹤發展成果的藉口故意放慢。

0

要創建的文本挖掘相關詞的列表,使用相似的功能,例如編輯距離