2012-11-16 58 views
0

我正在處理關於用戶如何啓動某些內容的數據庫設計。 我的想法是有timestamp(DateTime)列和一個方法列(varchar)。關於組合值的SQL組

該 '方法'(VARCHAR)可以是任何東西:

  • BUTTON_OK
  • BUTTON_X
  • APP_Y
  • APP_Z

我怎麼能算用途但是將一些價值分組。在這種情況下,我希望有我的結果:

  • 按鈕:20
  • APP_X:10
  • APP_Z:14
+0

您正在使用哪些DBMS?甲骨文? PostgreSQL的? DB2? –

+0

目前用於測試MySql,但這可能是MsSQL或其他。希望這不會影響查詢。 – RvdK

回答

2

您需要某種方式來定義哪些「方法」屬於哪個「方法組」。

一種方法是有一個查找表:

 
tbl_methodgroup 

method_id Method  Method_group 
1   Button_OK Buttons 
2   Button_X Buttons 
3   App_Y  App_Y 
4   App_Z  App_Z 

那麼你可以使用:


select 
b.method_group, 
count(1) 
from 
tbl_methodgroup a 
    inner join tbl_method b on a.Method=b.Method 
group by b.method_group 

這種方法將有作爲被添加更多的方法是可擴展性的優勢。而不是手動編碼查詢,每次都需要修改查詢。

+0

所以這是不可能沒有一個額外的表? – RvdK

+0

不可靠。你需要編寫一些相當討厭的模式匹配代碼,然後可能會聯合一些查詢來處理這些規則。隨着規則的改變或新的方法被添加到列表中,從長遠來看維持它將是一場噩夢。 –

1

如果表的名稱是TBLTEST,那麼該查詢將看起來像下面:如果我missread問題

SELECT method, COUNT(*) FROM tblTEst Group BY method 

道歉,最後的機會,以作出正確的,如果你有在數據和一致性GR你可以做下面的ouping場景:

SELECT LEFT(method,CHARINDEX('_',method)-1), 
     COUNT(*) 
FROM tblTest 
GROUP BY LEFT(method,CHARINDEX('_',method)-1) 

否則斯圖爾特摩爾的回答是正確的。

+0

不幸的是,@PowerRoy所要求的並不是什麼。他們希望通過一組方法進行分組(查看所需的結果,他們希望所有'按鈕*'方法一起計算而不是單獨計算(即;按鈕計數= Button_OK計數+ Button_X計數))。 –