2012-11-05 71 views
1

我想通过类型来显示用于给定用户的百分比(M或C) 我试图与此查询:GROUP BY用柱SQL的值

SELECT TYPE,user_name,pourcentage_c,pourcentage_m,id_user, 
     COUNT(TYPE) AS crtitique ,COUNT(TYPE) AS majeur 
FROM stat_alert 
LEFT OUTER JOIN user_qdf ON user_qdf.`id` = id_user 
WHERE user_qdf.`id`=id_user AND TYPE='C' 
GROUP BY id_user 
UNION ALL 
SELECT TYPE,user_name,pourcentage_c,pourcentage_m,id_user, 
     COUNT(TYPE) AS crtitique,COUNT(TYPE) AS majeur 
FROM stat_alert 
LEFT OUTER JOIN user_qdf ON user_qdf.`id` = id_user 
WHERE user_qdf.`id`=id_user AND TYPE='M' 
GROUP BY id_user 

我想在同一行显示百分比和关键的数量和单个用户

enter image description here

+0

HTTP://i.imgur。 com/x5KWN.png – user1794019

回答

0

这应该是重要的(现在不能测试)

SELECT TYPE,user_name,pourcentage_c,pourcentage_m,id_user, 
    SUM(CASE user_qdf_c.TYPE WHEN 'C' 1 ELSE 0 END) AS crtitique, 
    SUM(CASE user_qdf_m.TYPE WHEN 'M' 1 ELSE 0 END) AS majeur 
FROM stat_alert 
LEFT OUTER JOIN user_qdf user_qdf_c ON user_qdf_c.`id` = id_user AND TYPE='C' 
LEFT OUTER JOIN user_qdf user_qdf_m ON user_qdf_m.`id` = id_user AND TYPE='M' 
GROUP BY id_user 

这个想法不是使用COUNT,而是使用SUM。

编辑这可以被改写更好,与只使用一个LEFT JOIN(这意味着很多更好的表现!)看到@ SashiKant的,和@ bluefeet的解决方案。

+0

@SashiKant发布了这个消息,我觉得这样做很肮脏...... – ppeterka

0

尝试此::

SELECT 
TYPE, 
user_name,pourcentage_c,pourcentage_m,id_user,COUNT(TYPE) AS crtitique ,COUNT(TYPE) AS majeur 

FROM stat_alert LEFT OUTER JOIN user_qdf ON user_qdf.id = id_user和user_qdf.id = id_user TYPE = 'C' 或TYPE = 'M' GROUP BY id_user

+0

我会建议在你的两个'OR'条件下放置'()'。 – MatBailie

2

你应该能够使用类似的东西(这基本上是一个PIVOT功能)。这会在您的user_qdf表上执行一次JOIN一次。然后,您可以用CASE语句来获取计数(使用SUM),为每个不同的TYPE值的应用聚合函数:

SELECT TYPE, 
    user_name, 
    pourcentage_c, 
    pourcentage_m, 
    id_user, 
    sum(case when TYPE ='C' then 1 else 0 end) AS crtitique, 
    sum(case when TYPE ='M' then 1 else 0 end) AS majeur 
FROM stat_alert 
LEFT OUTER JOIN user_qdf 
    ON user_qdf.`id` = id_user 
WHERE user_qdf.`id`=id_user 
    AND type IN ('M', 'C') 
GROUP BY id_user 
+1

+1 - 将添加AND类型IN('M','C')'如果可以存在多个类型。 – MatBailie

+0

@Dems谢谢你的收获,修正。 – Taryn

+0

@bluefeet谢谢你的回答,只关心剩下的百分比i.imgur.com/2lP6w.png 但通常我有100 pourcentage_m, – user1794019

0

试试这个:

SELECT user_name, pourcentage_c, pourcentage_m, id_user, 
     COUNT(1) AS crtitique, COUNT(1) AS majeur 
FROM stat_alert 
LEFT OUTER JOIN user_qdf ON user_qdf.id = id_user 
GROUP BY id_user, TYPE 
+0

谢你的回答rs只关心剩下的是我有http://i.imgur.com/2lP6w的百分比。PNG – user1794019

+0

当类型=“C” – user1794019

+0

柱百分比-C示出了当I型=“C”和porcentagem pourcentage当我显示类型=“M”为总和完美地工作的百分比列percentage_c – user1794019