2013-10-10 82 views
-1

我正在處理一個查詢,需要輸出用戶在列中的'總參與',如1 -eng列將顯示有一個訂婚的用戶,第二列2-eng將顯示用戶誰做了2次交戰。同樣3eng,等等。請注意,顯示器應該是這樣的。我有一個具有userID的參與表。所以,我得到不同的用戶喜歡這種mysql根據條件顯示分組列列表

select count(distinct userID) from engagements 

和我訂婚的

select count(*) from engagements 

訂婚這裏指的是誰要麼喜歡的用戶,回答道,或共享的內容

請幫助。謝謝!我已經使用CASE和IF,但無法在下面的表格

1eng    2eng   3eng 

100    200   100 
+1

你有任何代碼嗎? –

+0

或者至少你的表模式? –

+0

我有訂婚表(engagement_id(auto),brandID,handle,postID,userID,engagementID,clikes,回覆,內容,發佈(日期時間),engagementType(喜歡,評論等))的數據庫架構。我將這些數據從api獲取到數據庫中 – sizzyfrisky

回答

0

考慮返回行的結果,並在您的應用程序之後他們旋轉顯示。

要返回所需的結果行,可以使用下面的查詢:

SELECT 
    engagementCount, 
    COUNT(*) AS userCount 
FROM (
    SELECT 
    userID, 
    COUNT(*) AS engagementCount 
    FROM engagements 
    GROUP BY userID 
) AS s 
GROUP BY engagementCount 
; 

基本上,第一組engagements行通過userID,每位userID的行數。之後,您使用計數作爲分組標準並計算在該計數中找到了多少用戶。

如果您堅持要返回SQL中的柱狀視圖,則需要求助於動態SQL,因爲最終結果集中的列數不確定。你可能會需要臨時存儲的內部SELECT的結果,進行掃描,以建立數表達式的列表,每engagementCount價值,並最終建立這樣的查詢:

SELECT 
    COUNT(engagementCount = 1 OR NULL) AS `1eng`, 
    COUNT(engagementCount = 2 OR NULL) AS `2eng`, 
    COUNT(engagementCount = 3 OR NULL) AS `3eng`, 
    ... 
FROM temporary_storage 
; 

或者SUM(engagementCount = value)代替COUNT(engagementCount = value OR NULL)。 (對我而言,後者更明確地表達了意圖,因此我首先提出了它的意圖,但是,如果您碰巧喜歡SUM技術,則兩者之間的性能應該沒有明顯差異。 here。)