2014-05-20 2 views
0

Je travaille actuellement sur un laboratoire pour ma classe de base de données qui utilise la base de données Northwind dans SQL. Quelques-unes des questions que je ne peux pas sembler figurer dehors sontSQL, requêtes de base

Liste le nom de tous les produits dont le prix unitaire est supérieur au prix unitaire moyen .

Je suppose qu'il ressemblerait à quelque chose comme

Select Product Name From Products Where UnitPrice > AVG(UnitPrice) 

Il ne semble pas accepter cependant.

En outre, une autre question est

Liste le nom du produit avec le plus bas prix unitaire

Je suppose que ce serait

Select ProductName From Product Where MIN(UnitPrice) 

Aucune de ces travaillent et Je suis extrêmement frustré, aidez s'il vous plaît!

+0

'' Produit NAME' ou Product_Name' ou 'ProductName'? –

+0

La condition 'WHERE' compare toujours deux valeurs – Serpiton

Répondre

2

Vous ne pouvez pas placer des fonctions de groupe dans la clause WHERE. Pensez-y de cette façon: l'expression dans la clause WHERE doit référencer seulement une ligne de la table (ou la jointure de lignes de plus d'une table). Mais l'expression ne peut pas prendre en compte un groupe de lignes.

Au lieu de cela, vous pouvez utiliser un sous-requête pour obtenir le prix moyen:

Select p.ProductName 
From Products As p 
Cross Join (Select AVG(UnitPrice) AS avg_unit_price From Products) As a 
Where p.UnitPrice > a.avg_unit_price 
+0

Cela génère une erreur de syntaxe car vous n'avez aucune condition de jointure. Vraisemblablement, vous vouliez dire CROSS JOIN. –

+0

@KyleHale, oui merci pour cette prise. J'ai tellement l'habitude d'utiliser MySQL, et il est permis d'omettre la condition de jointure dans MySQL. Question a été étiqueté uniquement avec «sql», donc je ne devrais pas assumer quelle marque ou version RDBMS. –

+0

L'indice pour moi était la référence à la base de données Northwind, qui est une chose Microsoft. :) –

0
Select a.[Product Name] 
From Products a, (select AVG(UnitPrice) as AvgUnitPrice from Products) b 
Where a.UnitPrice > b.AvgUnitPrice 

ou

Select a.[Product Name] 
From Products a 
Where a.UnitPrice > (select AVG(UnitPrice) as AvgUnitPrice from Products) 
0
Declare @Avg Decimal 
Select @Avg = Sum(UnitPrice)/Count(UnitPrice) 
     From Products 

Select A.ProductName 
     From Products 
     Where UnitPrice > @Avg 
+0

S'il vous plaît expliquer * comment * votre code résout le dilemme OP. –

1

Liste le nom de tous les produits dont le prix unitaire est supérieur que le prix unitaire moyen:

 

Select p.ProductName 
     From Products p 
     Where p.UnitPrice > (Select AVG(UnitPrice) From Products) 

Liste le nom du produit avec le plus bas prix unitaire: (Retours tous les produits ayant moins UnitPrice)

 

Select p.ProductName 
     From Products p 
     Where p.UnitPrice = (Select MIN(UnitPrice) From Products)