2016-05-02 14 views
1

die Fortsetzung für meine Frage zu lösen.Wie aggregate auf Where-Klausel zu zeigen? oder gibt es einen anderen Weg, um diese

Ich möchte Aggregate-Funktion auf Where-Klausel zeigen. aber ein Fehler ist aufgetreten.

meinem Tisch.

enter image description here

ich so versucht haben (welche Methode Gesamtkauf für sales_id nach where-Klausel

select * from customer where customer_id = ANY (
    select customer_id from sales where sales_id = ANY (
     select sales_id from sales_detail where sum(total) < (
      select sum(total) from sales_detail where sales_id = (
       select sales_id from sales where customer_id = (
        select customer_id from customer where name = 'steven' 
        ) 
       ) 
      ) group by sales_id 
     ) 
    ) 

zu zeigen, und ich habe wie schon versucht, diese (die die Nummer des Kaufs war innerhalb der Unterabfrage)

select * from customer where customer_id = ANY (
    select customer_id from sales where sales_id = ANY (
     select sales_id from sales_detail where (
      select sum(total) from sales_detail where sales_id = (
       select sales_id from sales where customer_id = (
        select customer_id from customer where name = 'steven' 
        ) 
       ) 
      ) 
      < ANY (
      select sum(total) as number_of_purchase, sales_id /*, sales_id*/ from sales_detail group by sales_id 
      ) group by sales_id 
     ) 
    ) 

zeige ich habe die Anzahl der Käufe für jene 5 Verkäufe ID

select sum(total) as number_of_purchase, sales_id /*, sales_id*/ 
from sales_detail 
group by sales_id 

und das Ergebnis war wie dieses

enter image description here

, was ich will ist

ich will Zeige 'Kundenname' und 'Kundennummer' an, wobei 'Kaufanzahl' mehr ist als 'Anzahl der Einkäufe' von 'steven'

Anzahl des Kaufs von steven ist 3

so das Ergebnis wie diese

sein sollte
| name | customer_id| 
| Clark | c03 | 
| Josh | c05 | 

weil insgesamt Kauf alle von ihnen mehr als 3 war man aus dem Ergebnis aussehen kann über

thx.

+1

wissen Sie über 'HAVING' Klausel? – Bulat

+0

Nein, ich fange gerade an, über SQL, insbesondere SQL-Server zu lernen. Oke thx für deinen Rat, ich werde anfangen, über Having Clause zu surfen. –

Antwort

2
select customer_id , name ,sum(total) 
from customer ,sales_detail d, Sales s 
where d.sales_id = s.sales_id 
and customer_id = s.customer_id 
having sum(total) > (select sum(total) 
         from customer , sales s, sales_detail d 
         where customer_id = s.customer_id 
         and d.sales_id = s.sales_id 
         and name = 'Steven') 
+0

Sie empfehlen nicht wirklich, diese uralte Joinsyntax zu verwenden, oder? –

1

Thx alle. für deinen Rat habe ich es bekommen.

ich nur die Abfrage neu erstellen und wurde so. : D

select * from customer where customer_id = ANY (
    select customer_id from sales where sales_id = ANY (
     select sales_id from sales_detail 
      group by sales_id 
      having sum(sales_detail.total) > (
       select sum(total) from sales_detail where sales_id = (
        select sales_id from sales where customer_id = (
         select customer_id from customer where name = 'steven' 
         ) 
        ) 
       ) 
     ) 
    ) 
+0

Kennen Sie einen Beitritt? – Paparazzi

+0

ja ich weiß. Das ist eine Aufgabe. und ich muss es tun, ohne Join oder inneren Join zu verwenden: D .. aber thx für Ihren Rat. Die Verwendung von Inner Join ist einfacher als die Verwendung von Sub-Query. –

+0

das ist Hausaufgaben? – Paparazzi

Verwandte Themen