2016-07-01 21 views
-1

行,所以我有3个表:SQL我使用子查询还是什么?

see this image

我需要返回哪些车已经收到固定的150倍

在此先感谢:)

+1

“或什么”是你的问题的答案。尝试加入表格并添加group by和 – Mike

+0

我只是不能让它工作im每次都会让biger变得混乱 – Jaka

+3

您需要在课堂上开始关注。查找选择和连接的教程。然后分组并计数。然后在。没有意义的是告诉你你必须分阶段学习的答案 – Mike

回答

0

不,就用两个内连接。然后开车分组并计算行数。

+0

有没有联接的方式? – Jaka

+0

是(对于内连接)和_no_。如果您希望使用SQL,则无法避免连接。这些可能是SQL最重要的特性。 – Gustav

1

查询会是这个样子:

SELECT T1.Car, COUNT(t3.*) 
FROM 
Table1 T1 
JOIN Table2 T2 ON T1.Id = T2.table2ID 
JOIN Table3 T3 on T3.Id = T2.table3Id 
GROUP BY T1.Car 
Order by T1.Car 

是的,你也可以做一个子查询,这样你就从表1可以选择和,而不是数量,你会做一个子查询与表2和表2加回到表1.

但是你可以使用连接。我认为他们在这里会更有效率。

1

首先,您使用的是关系型数据库,其次,你碰巧有2个Dimension表和1个FACT

维表使搜索FACT表更容易,但如果你需要这个唯一有效来自DIMENSION表中的特性,您无法在FACT表中获得(例如修补程序的[type])。

由于您需要汽车的原始结果及其维修次数,因此在查询中使用GROUP BYHAVING子句。请记住,HAVING子句仍然是PREDICATE,因此请使用正确的SARGS

SELECT CAR_ID, COUNT(*) --or COUNT(CAR_ID), it really does not matter 
FROM FACT_TABLE 
GROUP BY CAR_ID 
HAVING COUNT(FIX_ID) >= 150 

GROUP BY通过CAR_ID捣毁表并计算结合在COUNT函数的行而HAVING,开始谓词,过滤器的集合函数的结果。