MySQL查询与GROUP BY和HAVING相关

时间:2013-12-09 18:42:40

标签: mysql sql

我正在尝试使用GROUP BY和HAVING选择垒球数据库中的玩家数量,但我没有得到我期望的结果。有人可以帮我理解这个查询有什么问题吗?我希望这是一个我忽略的简单错误。

SELECT player_id AS 'players', SUM(sb_stats_HR) FROM 
`softball_stats` AS 'homers' GROUP BY 'players' HAVING 'homers' > 3;

提前感谢。

3 个答案:

答案 0 :(得分:1)

这应该有用。

SELECT 
player_id AS 'players', 
SUM(sb_stats_HR) AS 'homers'
FROM softball_stats  
GROUP BY player_id 
HAVING SUM(sb_stats_HR) > 3;

答案 1 :(得分:1)

使用反引号,你正在玩字符串。

SELECT player_id AS `players`, SUM(sb_stats_HR) 
FROM `softball_stats` AS `homers` 
GROUP BY `player_id ` 
HAVING `softball_stats` > 3;

如果这不起作用,请使用一些示例数据编辑您的帖子。

答案 2 :(得分:0)

Ticks用于封闭文本。反引号用于包含列或表别名。所以你的查询不起作用,因为你试图用包含字符的文本括起列别名。此外,您尝试使用表别名上的having进行过滤,而不是使用列别名进行过滤,这是不正确的。

使用此:

SELECT player_id AS players, SUM(sb_stats_HR)
FROM softball_stats
GROUP BY player_id 
HAVING SUM(sb_stats_HR) > 3;

请注意,如果您的别名没有任何特殊字符或空格,则无需将它们括在反引号中。

如果你坚持使用反引号:

SELECT player_id AS `players`, SUM(sb_stats_HR)
FROM softball_stats
GROUP BY player_id 
HAVING SUM(sb_stats_HR) > 3;

请注意,尽管可以在having子句中使用列别名(您不能在group by子句中使用它们),但为了清楚起见,我选择不使用它们。首先要了解它在最基本的层面是如何工作的,然后你可以使用这些技巧。