2013-10-15 32 views
1

我正试图在存储过程中生成一些用户分析。在单个sql语句中获取多个条件的计数和总和

下面是SQL代码:

SELECT count(*),SUM(n.credit) from notifications n 
left join questions q on q.id = n.question_id 
where n.user_id = u_id and q.question_level = 1 ; 

q.question_level有三种可能的值=>1,2 and 3是否有一种方式来获得三个级别的独立计数和和值在一个SQL语句,而不是单独的sql语句如上。

回答

1

你的意思是这样吗?

SELECT 
    count(*), 
    SUM(n.credit) AS totalCredit, 
    SUM(CASE WHEN q.question_level = 1 THEN n.credit ELSE 0 END) as level1_sum, 
    SUM(CASE WHEN q.question_level = 2 THEN n.credit ELSE 0 END) as level2_sum, 
    SUM(CASE WHEN q.question_level = 3 THEN n.credit ELSE 0 END) as level3_sum, 
    SUM(q.question_level = 1) as level1_count, 
    SUM(q.question_level = 2) as level2_count, 
    SUM(q.question_level = 3) as level3_count 
from 
    notifications n 
left join questions q 
    on q.id = n.question_id 
where 
    n.user_id = u_id 
+0

我想要一个信贷金额和问题数量总数。将你的答案和juergen的结合起来就会像我想要的那样工作。 –

+1

@VarunJain:你的意思是这样的。我用juergend的回答更新它 – Arion

+0

即将接受。你是第一个。 –

1

试试这个:

SELECT COUNT(*), SUM(n.credit) 
FROM notifications n LEFT JOIN questions q ON q.id = n.question_id 
WHERE n.user_id = u_id 
GROUP BY q.question_level; 
1

像这样:

SELECT 
    count(*) total_count, 
    SUM(n.credit) total_credit, 
    SUM(q.question_level = 1) as level1_count, 
    SUM(q.question_level = 2) as level2_count, 
    SUM(q.question_level = 3) as level3_count, 
    SUM(n.credit * (q.question_level = 1)) as level1_credit, 
    SUM(n.credit * (q.question_level = 2)) as level2_credit, 
    SUM(n.credit * (q.question_level = 3)) as level3_credit 
from notifications n 
left join questions q on q.id = n.question_id 
where n.user_id = u_id 

便利,在MySQL的布尔是10