【问题标题】:SQL do i use Subquery or what?SQL 我使用子查询还是什么?
【发布时间】:2016-07-01 22:06:18
【问题描述】:

好的,所以我有 3 张桌子:

我需要返回哪些汽车已经接受了超过 150 次的修理

提前感谢:)

【问题讨论】:

  • “或什么”是您问题的答案。尝试加入表格并添加分组依据和拥有
  • 我只是无法让它工作,我每次都会弄得更乱
  • 你需要在课堂上开始专心致志。查找有关选择和连接的教程。然后分组并计数。然后就拥有了。分阶段告诉你必须学习的答案是没有意义的
  • 欢迎来到 SO :) StackOverflow 用户不会在你的位置上做任何事情。您应该编辑您的问题并解释您到目前为止所做的尝试。这将表明您首先努力寻找答案:How do I ask a good question ?
  • 总是带着怀疑的态度接受建议。哎呀,我也会犯错。

标签: sql ms-access count subquery


【解决方案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。

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

【讨论】:

    【解决方案2】:

    首先,您使用的是关系数据库,其次,您恰好有 2 个Dimension 表和 1 个FACT

    维度表使搜索FACT 表变得更容易,尽管这仅在您需要那些无法在FACT 表中获得的DIMENSION 表中的特征时才有效(例如修复的[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 开始一个谓词,过滤聚合函数的结果。

    【讨论】:

      【解决方案3】:

      不,只需使用两个内连接。然后按车分组,数行数。

      【讨论】:

      • 有没有不加入的方法?
      • 是(用于内部连接)和 no。如果您希望使用 SQL,则无法避免连接。这些可能是 SQL 最重要的一个特性。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-19
      • 2011-01-12
      相关资源
      最近更新 更多