2009-12-29 63 views
0

我不知道如何写这个查询的一点帮助,这是一个有点复杂......MySQL查询 - 需要使用分组

这是什么东西被存储在表中的例子:

KID  Utype Qtype Qname  Resp UID 
Q24-YYY Case T001 HM-99678 N8944 2455 
Q24-YYY Case T001 HM-99678 N8944 9874 
Q24-YYY Case F099 HM-99678 N8944 6554 
Q24-YYY Case F099 HM-99678 SD789 2331 
Q24-YYY Case F099 HM-99678 SD789 1772 
Q24-YYY Case T001 HM-99678 PX667 8897 
Q24-YYY Case F099 HM-99678 PX667 4412 
Q24-YYY Case F099 HM-99678 SD789 6643 
Q24-YYY Case F099 HM-99678 PX667 3221 
Q24-YYY Case T001 HM-99678 SD789 6337 

我想要做的是首先,按Resp列将其分组,然后按Qtype列,然后为Resps添加一个计数列...因此,结果如下所示:

KID  Utype Qtype Qname  Resp COUNT 
Q24-YYY Case T001 HM-99678 N8944 2 
Q24-YYY Case F099 HM-99678 N8944 1 
Q24-YYY Case T001 HM-99678 SD789 1 
Q24-YYY Case F099 HM-99678 SD789 3 
Q24-YYY Case T001 HM-99678 PX667 1 
Q24-YYY Case F099 HM-99678 PX667 2 

我一直在玩vari使用的OU迭代组通过,但到目前为止,我得到无效的分组列错误,这样的...

回答

5

你应该组,你不计算所有列:

select KID, Utype, Qtype, Qname, Resp, count(*) 
from YourTable 
group by KID, Utype, Qtype, Qname, Resp 

的MySQL并没有真正执行但是,如果您忘记在您使用的列上进行分组,您基本上会得到一个随机值。

0

首先,您不能在单个查询组中按一列,然后按另一列。你通过一个集合建立一个组。如果您希望订单的建立必须通过订单条款确定,则该集合中的列没有订单。

其次,在查询的输出不是列或表达式是该组通过设置的一部分,必须基于一个聚合函数生成任何你想要的......

所以使森达假设(KID,UType和amd Qname总是由Resp和QType确定)

Select KID, UType, Resp, Qtype, Qname, Count(*) RespCount 
    From Table 
    Group By KID, UType, Resp, Qname, Qtype 
    Order By Resp, QType 
1

根据标准,应该工作此查询。 (我知道MySQL在执行group by子句时有一些非标准的事情,所以它不是100%)

Select distinct Table.*, tmp.Count From 
    (Select Qtype, Resp, count(*) AS Count From table Group By Resp, Qtype) tmp 
    Join Table ON Table.Qtype = tmp.Qtype and Table.Resp = tmp.Resp