2013-02-01 30 views
0

我想通過使用GROUP BY函數對數據進行排序。我的查詢工作正常,直到我將它添加到它。這是:在MYSQL中按功能分組

SELECT a.cust_id, a.account_id, a.product_cd, status, b.name, i.fname, i.lname, 
from account a, branch b, individual i 
where b.name = 'So. NH Branch' or b.name = 'Woburn Branch' and a.status = 'ACTIVE' 
group by b.name; 

我收到此消息:您的SQL語法中有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在'從賬戶a,分支b,個人i' ''附近使用正確的語法,其中b.name ='So. NH分公司「或b.name」第2行

+1

你是否意識到自己正在桌子上做笛卡爾產品? – Lamak

+0

(我不知道短交叉連接語法的理由是什麼..) – 2013-02-01 18:51:40

回答

3

您的SELECT一個額外的逗號:

SELECT a.cust_id, 
    a.account_id, 
    a.product_cd, 
    status, 
    b.name, 
    i.fname, 
    i.lname, 
     ^--- this is incorrect. 

有一件事,我看到那個奇怪的是你查詢你不加入你的表,你正在返回一個笛卡兒結果集。

如果你不想要一個笛卡爾結果集,那麼你可以在表之間使用一個JOIN。與此相似:

SELECT a.cust_id, 
    a.account_id, 
    a.product_cd, 
    status, 
    b.name, 
    i.fname, 
    i.lname 
from account a 
INNER JOIN branch b 
    ON a.branchid = b.id 
INNER JOIN individual i 
    ON a.individualid = i.id 
where b.name = 'So. NH Branch' or b.name = 'Woburn Branch' and a.status = 'ACTIVE' 
group by b.name; 

注:我猜對將連接表中的列名。

+1

OP是否真的想生成笛卡爾積? – Kermit

+0

@ njk可能不會,但我將這些細節添加到我的答案。 – Taryn

+0

你不應該選擇在group by還是aggregate_function? –

1

此外,bluefeet指出的錯誤逗號,您正在生產笛卡爾產品。這可能不是你想要的。您需要將表莫名其妙關聯(圖只):

SELECT a.cust_id, 
     a.account_id, 
     a.product_cd, 
     status, 
     b.name, 
     i.fname, 
     i.lname 
FROM account a, 
     branch b, 
     individual i 
WHERE i.cust_id = a.cust_id    <-- JOIN individual to account 
     AND b.account_id = a.account_id <-- JOIN branch to individual 
     AND b.name = 'So. NH Branch' 
     OR b.name = 'Woburn Branch' 
      AND a.status = 'ACTIVE' 
GROUP BY b.name; 
0

除了其他的答案就笛卡爾積和錯誤的逗號,如果你只是想進行排序,你應該使用ORDER BY,而不是數據GROUP BY,因爲只有在使用聚合函數時才需要後者。