mysql查询 - 需要一些分组帮助

时间:2009-12-29 20:03:57

标签: mysql count group-by

我想知道如何编写这个查询,这有点复杂......

这是表格中存储内容的一个示例:

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

我一直在使用group by进行各种迭代,但到目前为止,我得到了无效的组列错误等......

3 个答案:

答案 0 :(得分:5)

您应该对您未计算的所有列进行分组:

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

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

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

答案 2 :(得分:0)

首先,您不能在单个查询组中按一列,然后再按另一列。您通过一组建立一个组。该集合中的列没有订单,如果您想要建立的订单必须由Order By Clause建立。

其次,您希望在查询的输出中生成的任何内容都不是一个列或表达式,而该一个列或该表达式必须基于聚合函数...

所以制作sime假设,(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