2009-12-29 58 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