2010-03-04 31 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

要创建的文本挖掘相关词的列表,使用相似的功能,例如编辑距离