2013-12-09 99 views
1

我試圖使用GROUP BY和HAVING來選擇壘球數據庫中的球員數量,但沒有得到我期望的結果。有人能幫我理解這個查詢有什麼問題嗎?我認爲這是一個簡單的錯誤,我忽略了。與GROUP BY和HAVING相關的MySQL查詢

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

在此先感謝。

回答

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; 
+0

您正在複製OP的查詢...或者,與OP有什麼不同? – Barranka

+0

我沒有得到你。請詳細說明。 – Aditya

+0

謝謝,我會把它標記爲已經過了5分鐘的窗口。我實際上在上面錯誤地製作了我的問題。我的原始查詢中的「FROM softball_stats」前面有AS'homers',但它仍然不起作用。不過,你的解決方案就像一個魅力一樣。 – Jim

1

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

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

如果這不起作用,編輯您的文章與一些示例數據。

+2

您不能在Group By子句中使用別名。 – Aditya

+0

啊,那是我不知道的。感謝您的信息!希望我可以給每個人多個獎勵多個正確的答案! – Jim

0

刻度線用於包圍文本。反引號用於包含列或表別名。因此,您的查詢不起作用,因爲您試圖將列別名與包含字符的文本放在一起。另外,您正試圖在表別名上使用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子句中使用),我選擇不使用他們,爲了清晰起見。首先了解它如何在最基本的層面上工作,然後你就可以使用這些技巧。

+0

這也是有幫助的。謝謝。 – Jim