2016-03-21 11 views
-1

を満たしている二つのテーブル、条件が

TABLE1がある列によって接合された複数のテーブルから選択します:

name  | surname | firstname 

cookie | Smith | John  
cake  | Miller | Ben  

表2:

name  | day | points1 | points2 

cookie | 1 | 5  | 5 
cookie | 1 | 4  | 6 
cake  | 1 | 7  | 3 
cake  | 1 | 7  | 3 
cookie | 2 | 4  | 4 
cookie | 2 | 4  | 4 
cake  | 2 | 1  | 2  
cake  | 2 | 3  | 4  

我々は一日 とSUM(ポイントが必要+ points2)AS total GROUP BY日には、 と同様に、姓と名はtable1の となります。合計が15より大きい場合は、表1と表2の名前が一致します。 さらに、結果はORDER BYの合計DESC、姓ASCです。

結果が得られるはず:2日目の彼の合計が、表2に、それぞれの名前が表1にエントリを有することのみ10

注あるので

surname | firstname | day | total 

Miller | Ben  | 1 | 20 
Smith | John  | 1 | 20 
Smith | John  | 2 | 16 

ベン・ミラー(ケーキ)は、表示されません。あなたは結果に表示されるように、「」と「FIRSTNAME」をしたい場合、あなたはあまりにもこれらのフィールドでGROUPになりますまあ

答えて

0

、(GROUP BY式のすべてのSELECTフィールドは集約である必要があります(SUM 、AVG、...)またはGROUP BY句に現れます)。

HAVINGを使用すると、GROUP BYの結果を制限できます。

私はこのコードが動作すると思います:

SELECT surname, firstname, day, (SUM(points1) + SUM(points2)) AS total 
FROM table1, table2 
WHERE table1.name = table2.name 
GROUP BY surname, firstname, day 
HAVING (SUM(points1) + SUM(points2) > 15 
ORDER BY total DESC, surname ASC;