2015-04-29 83 views
0

我有两个表abbabb_click组和计数返回SQL

abb包含哪些对象的信息ident这是活动的。 abb_click包含来自每个student_id的信息,关于每个ident

我 “只是” 想算活跃的identabb_click特定student_id数据。下面

的选择似乎只计算活动IDENT S,不采取任何担忧,如果IDENTabb_click

你可以在这里看到小提琴:http://sqlfiddle.com/#!9/b7262/1


结果应该是: 为student_id数据945 - 2的活性的ident小号

问题:我该怎么办“调整“SELECT来计算有效ident s在表abb加入abb_click


SELECT t.student_id, number_of_idents 
FROM `abb_click` AS t 
    INNER JOIN 
     (SELECT ident, COUNT(ident) as number_of_idents FROM `abb` AS k 
     WHERE k.active = '1' 
    ) AS t3 
    ON t.ident = t3.ident 
WHERE t.student_id = '945' 
GROUP BY t.student_id 
ORDER BY number_of_idents ASC; 

abb

bid, ident, active 

abb_click

kid, ident, student_id, click 

数据表abb

1, 'ma53', 1 
2, 'ma664', 1 
3, 'ma779', 0 
4, 'ma919', 1 

数据表abb_click

1, 'ma53', 945, 'E' 
2, 'ma53', 945, 'E' 
3, 'ma53', 945, 'C' 
4, 'ma664', 945, 'C' 
5, 'ma664', 945, 'A' 
6, 'ma664', 945, 'E' 
7, 'ma779', 945, 'A' 

回答

1

我相信这应该做你想做的。

select student_id, COUNT(distinct ac.ident) as active_idents 
from abb_click ac 
join abb on abb.ident = ac.ident 
where abb.active = 1 
--and student_id = 945 
group by student_id 
+0

非常整齐,工作得很好(额外的'和student_id = 945')。非常感谢您的时间和帮助。谢谢@Sander! – Per76

1

除非我已经错过,了解这应该工作。

SELECT abb.*, COUNT(abb_click.id) as total_abb_clicks 
FROM abb 
INNER JOIN abb_click ON abb_click.ident = abb.ident 
WHERE abb.active = 1 && abb_click.student_id = 945 
GROUP BY abb.id 

- 编辑:抱歉,我忘记了学生的状况。因此,这应该返回:

投标,IDENT,活跃,total_abb_clicks
1, 'ma53',1,3
2, 'ma664',1,3
4, 'ma919',1,1

+1

谢谢@Camway。不是我想要的结果,但确实非常有用。 – Per76

+2

现在看到答案,我看到你来自哪里;我想念明白。 – Camway

1

可以返回的ident的独特价值,并通过将它们分组,然后用abb加入和做计数student_id数据:

SELECT click.student_id, COUNT(click.ident) as total_abb_clicks 
FROM abb 
INNER JOIN (select ident, student_id from abb_click group by ident, student_id) click ON click.ident = abb.ident 
WHERE abb.active = 1 and click.student_id=945 
GROUP BY click.student_id 
+1

这工作得很好。非常感谢您的时间和帮助。谢谢@Sami Kuhmonen! – Per76