2013-10-10 48 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。)