我想知道如何编写这个查询,这有点复杂......
这是表格中存储内容的一个示例:
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进行各种迭代,但到目前为止,我得到了无效的组列错误等......
答案 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