2016-12-05 94 views
-1
SELECT orderyear, numcusts 
FROM (SELECT orderyear, COUNT (DISTINCT custid) AS numcustd 
     FROM (SELECT YEAR()orderdate) AS orderyear, custid 
FROM sales,Orders) AS D1 
GROUP BY orderyear) AS D2 

WHERE numcusts > 70; 
+0

错字之外,它仍然是非常不可能的查询做你想让它做什么。销售,订单和客户如何相关?你究竟想要计算什么? –

+0

请更改查询 - 以文本表格格式提供数据样本和所需结果。 –

回答

0
SELECT orderyear, 
      COUNT (DISTINCT custid) AS numcustd 
     FROM (SELECT YEAR(orderdate) AS orderyear, 
        custid 
       FROM sales, 
        Orders) AS D1 
    GROUP BY orderyear 
    HAVING COUNT (DISTINCT custid) > 70; 

OR

SELECT YEAR(orderdate) AS orderyear, 
      COUNT(DISTINCT custid) AS numcustd 
     FROM sales, 
      orders 
    GROUP BY YEAR(orderdate) 
    HAVING COUNT(DISTINCT custid) > 70; 
1
  • 没有在查询一个错字:YEAR()orderdate)应该YEAR (orderdate)
  • 您正在使用过时的语法进行交叉连接:FROM sales,Orders。改为使用FROM sales CROSS JOIN Orders。但是,你真的想要交叉连接吗?为什么要把所有的销售和所有的订单结合起来更可能的是你实际上想要一个内部联接(FROM sales INNER JOIN Orders ON ...)或者甚至是两个表的联合。
  • 您可以合并两个最内层的查询。
  • 您可以通过直接应用HAVING COUNT (DISTINCT custid) > 70来摆脱最外面的查询。
0

试试这个:

SELECT D1.orderyear, D1.numcustd 
FROM (
     SELECT YEAR(orderyear) as orderyear, COUNT (DISTINCT custid) AS numcustd 
     FROM sales,Orders 
     GROUP BY orderyear 
          ) AS D1 
WHERE numcusts > 70; 
相关问题