Mysql:根据不同活动的表值的总和

时间:2012-05-30 16:10:54

标签: mysql sql phpexcel

现在我有3个表,第一个用于用户,第二个用于用户组,第三个用于点(以及其他,如果你想要一个我可以为你创建它:P)。

表用户: user_id | fname | active

表user_groups: id | group_id | user_id | active

表user_points: id | point_type | point_units | active

群组中的每个用户都可以获得不同活动的积分。所以,我想展示一下用户为不同的活动所获得的积分,最后是总计。

这是我到目前为止的查询:

SELECT 
    u.user_id AS `ID`,  
    u.fname AS `Name`,  
    SUM(case when up.point_type = 'Referrals' then up.point_units else 0 end) AS `Referrals`, 
    SUM(case when up.point_type = 'Email' then up.point_units else 0 end) AS `Email`, 
    SUM(case when up.point_type = 'Facebook' then up.point_units else 0 end) AS `Facebook`, 
    SUM(case when up.point_type = 'Twitter' then up.point_units else 0 end) AS `Twitter`, 
    SUM(case when up.point_type = 'Extra' then up.point_units else 0 end) AS `Extra`, 
    SUM(case when up.point_type = 'Discount' then up.point_units else 0 end) AS `Discount`, 
    SUM(case when u.user_id = up.user_id then up.point_units else 0 end) AS `Total` 
FROM users AS u, user_groups AS uc, user_points AS up 
WHERE u.user_id = uc.user_id 
    AND u.user_id = up.user_id 
    AND u.active = 1 
    AND uc.active = 1 
    AND up.active = 1 
    AND uc.group_id = up.group_id 
    AND uc.group_id = 65 
ORDER BY u.fname; 

我遇到的问题是查询只显示一个用户以及每列中所有用户的总点数。

我知道这不是正确的方法,但我不知道如何将所有内容都放入查询中。此外,我将此查询提供给PHPExcel,因此它可以生成一个友好的友好报告。

有什么想法吗? : - )

1 个答案:

答案 0 :(得分:1)

使用聚合函数时需要GROUP BY子句。你的可能看起来像:

GROUP BY u.user_id

在你的查询中,它会在这里:

AND uc.group_id = 65 
GROUP BY u.user_id
ORDER BY u.fname;