从符合条件的列连接的多个表中进行选择

时间:2016-03-21 18:46:04

标签: mysql select join

有两个表,

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(points1 + points2)AS总计 GROUP BY日,名称 以及table1的姓氏和名字, table1和table2中的名称匹配, 如果总数大于15。 此外,结果应该是ORDER BY总DESC,姓ASC。

结果应该产生:

surname | firstname | day | total

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

Ben Miller(蛋糕)没有出现,因为他的第2天总共只有10个。

请注意,table2中的每个名称在table1中都有一个条目。

1 个答案:

答案 0 :(得分:0)

好吧,如果您想在结果中显示“ surname ”和“ firstname ”,那么您也必须按这些字段进行GROUP(所有SELECT字段在GROUP BY表达式必须是聚合(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;