在MYSQL中按功能分组

时间:2013-02-01 18:47:38

标签: mysql sql

我正在尝试使用GROUP BY函数对数据进行排序。我的查询工作正常,直到我添加它。这是:

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 ='所以。第2行的NH Branch'或b.name'

3 个答案:

答案 0 :(得分: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 :(得分: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; 

答案 2 :(得分:0)

除了关于笛卡尔积和错误逗号的其他答案之外,如果您只是尝试对数据进行排序,则应使用ORDER BY而不是GROUP BY,因为后者仅在使用聚合函数。