如果我想知道电影名称及其销售总额,我可以使用下面的查询吗?
Movie.Name, Movie.Sales,
FROM Movie
GROUP BY Movie.Name
HAVING SUM (Movie.Sales)>120000
ORDER BY SUM(Movie.Sales)DESC;
我知道最好写
Movie.Name, Movie.Sales,
FROM Movie
GROUP BY Movie.Name
HAVING Movie.Sales>120000
ORDER BY Movie.Sales DESC;
我只是想知道第一个在测试中是否仍然被认为是一个好的答案。 BTW两个查询给出相同的东西,但不需要SUM,因为Movie.Sales已经有了总数。你认为这是一个糟糕的答案吗?
答案 0 :(得分:0)
您必须记住,按顺序始终适用于可见列 在你的情况下第一个选择
select Movie.Name, Movie.Sales,
FROM Movie
GROUP BY Movie.Name HAVING SUM (Movie.Sales)>12000 0
ORDER BY SUM(Movie.Sales)DESC;
包含两个错误......
FROM子句之前的错误,
和未显示的列的顺序
第二个是正确的
答案 1 :(得分:0)
不,第一个查询不起作用,因为它有错误。您正在GROUP BY
字段上执行Movie.Name
,但尝试在查询中包含未分组的字段而不使用聚合函数。在您想要使用Movie.Sales
字段的任何地方,您必须将其与SUM()
函数结合使用。
SELECT Movie.Name, SUM(Movie.Sales) Sales
FROM Movie
GROUP BY Movie.Name
HAVING SUM(Movie.Sales)>120000
ORDER BY SUM(Movie.Sales) DESC
以上是您的第一个查询的更正版本,但您的第二个查询肯定是正确的,可能是最佳做法,因为该表已经汇总。