0

全部 - 我正在尝试做一个基本的(理论上)准时完成报告。我想列出assigned_to_id | 准时百分比(百分比 - 但现在这并不重要)

我想我告诉 MySQL 获取所有任务的计数以及在截止日期之前的某个日期标记为关闭的所有任务的列表,然后给我那个数字......看起来很简单?

我是系统管理员 - 不是 SQL 开发人员,所以请原谅我的粗鲁!

我有

select issues.assigned_to_id, tb1.percent from (
Select
(select count(*) from issues where issues.due_date >= date(issues.closed_on) group by           issues.assigned_to_id)/
(select count(*) from issues group by issues.assigned_to_id) as percent
from issues)
as tb1
group by tb1.percent;

我试图解决多行问题时有点混淆,所以当我开始时情况可能会更糟 - 但如果我能得到一个用户列表以及他们的百分比,那就太好了!

我很想使用“for each”之类的东西,但我知道那不存在。

谢谢!

4

5 回答 5

0

如果我们必须完全重写您的查询,试试这个。

select issues.assigned_to_id, ((select count(*) from issues where issues.due_date >= date(issues.closed_on) )/
(select count(*) from issues)) as perc from issues group by issues.assigned_to_id;
于 2013-10-18T16:15:02.467 回答
0

MySQL 具有与这种情况匹配的等效交叉/外部应用

SELECT T.*,Data.Value FROM [Table] T OUTER APPLY      

你可以尝试使用它。

于 2013-10-18T15:51:08.867 回答
0

您可能应该做的是使用 IF 语句:

SELECT
  assigned_to_id,
  SUM(IF(due_date >= date(closed_on), 1, 0))/SUM(1) AS percent
FROM issues
GROUP BY assigned_to_id
ORDER BY percent DESC

请注意,我在这里分组assigned_to_id和排序percent。这使您可以计算每个assigned_to_id组的百分比并按 对这些组进行排序percent

于 2013-10-18T16:07:08.150 回答
0

我想你想要这样的东西,一个问题 ID 列表和按时完成的百分比。

select distinct issues.assigned_to_id, done_on_time.c / issue_count.c as percent
from issues
join 
  (select issues.assigned_to_id, count(*) as c 
   from issues 
   where issues.due_date >= date(issues.closed_on) 
   group by issues.assigned_to_id) as done_on_time
   on issues.assigned_to_id = done_on_time.assigned_to_id 
  (select issues.assigned_to_idm, count(*) as c
   from issues 
   group by issues.assigned_to_id) as issue_count
   on issues.assigned_to_id = issue_count.assigned_to_id 
于 2013-10-18T19:21:04.860 回答
0

您有一个除法运算,例如(foo) / (bar),分子和分母都是子查询,因为您希望获取这些子查询并将它们的答案相除,它们必须分别返回一个SINGLE值,例如1 / 2

错误消息表明一个(或可能两者)正在返回多值查询结果,因此实际上您正在尝试执行类似1,2,3 / 4,5,6的操作,这不是有效的数学运算,并且您最终会收到错误消息。

修复子查询,使它们每个只返回一个 SINGLE 值。

于 2013-10-18T15:45:08.577 回答