2016-12-05 96 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; 
相關問題