2016-12-05 3 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 ...)、または両方の表の結合体さえしたいと考えています。
  • 2つの最も内側のクエリをマージできます。
  • 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; 
関連する問題