我正在處理關於用戶如何啓動某些內容的數據庫設計。 我的想法是有timestamp(DateTime)列和一個方法列(varchar)。關於組合值的SQL組
該 '方法'(VARCHAR)可以是任何東西:
- BUTTON_OK
- BUTTON_X
- APP_Y
- APP_Z
- 等
我怎麼能算用途但是將一些價值分組。在這種情況下,我希望有我的結果:
- 按鈕:20
- APP_X:10
- APP_Z:14
我正在處理關於用戶如何啓動某些內容的數據庫設計。 我的想法是有timestamp(DateTime)列和一個方法列(varchar)。關於組合值的SQL組
該 '方法'(VARCHAR)可以是任何東西:
我怎麼能算用途但是將一些價值分組。在這種情況下,我希望有我的結果:
您需要某種方式來定義哪些「方法」屬於哪個「方法組」。
一種方法是有一個查找表:
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
這種方法將有作爲被添加更多的方法是可擴展性的優勢。而不是手動編碼查詢,每次都需要修改查詢。
所以這是不可能沒有一個額外的表? – RvdK
不可靠。你需要編寫一些相當討厭的模式匹配代碼,然後可能會聯合一些查詢來處理這些規則。隨着規則的改變或新的方法被添加到列表中,從長遠來看維持它將是一場噩夢。 –
如果表的名稱是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)
否則斯圖爾特摩爾的回答是正確的。
不幸的是,@PowerRoy所要求的並不是什麼。他們希望通過一組方法進行分組(查看所需的結果,他們希望所有'按鈕*'方法一起計算而不是單獨計算(即;按鈕計數= Button_OK計數+ Button_X計數))。 –
您正在使用哪些DBMS?甲骨文? PostgreSQL的? DB2? –
目前用於測試MySql,但這可能是MsSQL或其他。希望這不會影響查詢。 – RvdK