Mysql平均所有计数结果

时间:2016-10-07 16:15:49

标签: mysql

我试图将我的所有结果归结为" Count"但是它告诉我列#34; Count"不存在。

SELECT
    Date,
    COUNT(Date) as Count,
    a.Average
From Rundown
LEFT JOIN (
            SELECT AVG(Count) AS Average, WorkOrder FROM Rundown
            ) AS a
            ON (Rundown.WorkOrder = a.WorkOrder)
WHERE Rundown.Date > (DATE_SUB(CURDATE(), INTERVAL 30 Day))
AND Completion = 1
GROUP BY Date

我期待的结果

Date | Count | Average
2016-09-08 | 19 | 19
2016-09-09 | 20 | 19
2016-09-10 | 19 | 19
2016-09-12 | 17 | 19

编辑:

我最后写了第二个查询来为我完成这个

SELECT 
    ROUND(avg(a.Count)) as Average
FROM (
SELECT
    Date,
    COUNT(Date) as Count
From Rundown
    WHERE Rundown.Date > (DATE_SUB(CURDATE(), INTERVAL 7 Day))
    AND Completion = 1
GROUP BY Date
    ) as a

3 个答案:

答案 0 :(得分:0)

在您的查询中,不存在列数

SELECT
  Date,
  COUNT(Date) as Count,
  a.Average
From Rundown
LEFT JOIN (
          SELECT AVG(Count) AS Average, WorkOrder FROM Rundown
                     ^^ this column not exist 
          ) AS a
          ON (Rundown.WorkOrder = a.WorkOrder)
WHERE Rundown.Date > (DATE_SUB(CURDATE(), INTERVAL 30 Day))
AND Completion = 1
GROUP BY Date

你可以使用Count(Date)

SELECT
    Date,
    COUNT(Date) as Count,
    a.Average
From Rundown
LEFT JOIN (
            SELECT AVG(Count(Date)) AS Average, WorkOrder FROM Rundown
            ) AS a
            ON (Rundown.WorkOrder = a.WorkOrder)
WHERE Rundown.Date > (DATE_SUB(CURDATE(), INTERVAL 30 Day))
AND Completion = 1
GROUP BY Date

对于分组来说

SELECT
    `Date`,
    COUNT(`Date`) as Count,
    a.Average
From Rundown
LEFT JOIN (
            SELECT AVG(Count(`Date`)) AS Average, WorkOrder FROM Rundown
            GROUP BY WorkOrder
            ) AS a
            ON (Rundown.WorkOrder = a.WorkOrder)
WHERE Rundown.`Date` > (DATE_SUB(CURDATE(), INTERVAL 30 Day))
AND Completion = 1
GROUP BY `Date`
;

答案 1 :(得分:0)

你没有计算任何地方的日期。所以你这样计算。

 SELECT COUNT(*) / COUNT(DISTINCT date) AS Average, WorkOrder 
 FROM Rundown
 GROUP BY WorkOrder

答案 2 :(得分:0)

这看起来像GROUP BY ... WITH ROLLUP的工作,但没有完整的架构,很难说。我认为这就是你的意思:

SELECT
  Date,
  COUNT(*) / COUNT(Date) AS Count_or_Average
From Rundown
WHERE Rundown.Date > CURDATE() - INTERVAL 30 Day
AND Completion = 1
GROUP BY Date WITH ROLLUP

NULL日期是您的平均值