首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL计数全部超出限制

MySQL计数全部超出限制
EN

Stack Overflow用户
提问于 2011-07-14 16:36:06
回答 3查看 449关注 0票数 2

我有一个MySQL查询,它计算我们从前五个客户那里工作的小时数。这可以很好地工作,并且我正在将数据绘制在图形上。我试图实现的是查询中的计算,它返回第六个结果集,该结果集是不在前五个小时中的所有小时的总和。即“其他”结果,因此所有6个结果的总和将等于projects.hours的总和。

我的问题是:

代码语言:javascript
复制
SELECT
  SUM(projects.hours) AS total_hours
FROM projects
GROUP BY projects.companyID
ORDER BY total_hours DESC
LIMIT 5
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-14 16:47:12

代码语言:javascript
复制
SELECT
SUM(projects.hours) AS total_hours,
(SELECT SUM(projects.hours) FROM projects) AS all_hours
FROM 
projects
GROUP BY 
projects.companyID
ORDER BY total_hours DESC
LIMIT 5

在应用程序中从all_hours中减去total_hours。

票数 4
EN

Stack Overflow用户

发布于 2011-07-14 16:43:39

代码语言:javascript
复制
SELECT
  1 no,
  projects.company,
  SUM(projects.hours) AS total_hours
FROM 
  projects
GROUP BY 
  projects.companyID
ORDER BY
  total_hours DESC
LIMIT 5

UNION ALL

SELECT
  2 no,
  'Others',
  SUM(projects.hours) AS total_hours
FROM 
  projects
WHERE projects.companyID NOT IN 
( SELECT companyID 
  FROM 
  (  SELECT
      projects.companyID
    FROM 
      projects
    GROUP BY 
      projects.companyID
    ORDER BY
      SUM(total_hours) DESC
    LIMIT 5
  ) AS tmp
)
票数 0
EN

Stack Overflow用户

发布于 2011-07-14 17:41:13

将这两种方法结合起来如何?通过添加汇总,我们可以消除对IN的需求

(我不确定您是否可以使用limit进行rollup,但我这里没有MYSQL,所以无法测试,抱歉)

注意:我希望这会返回一个空的公司id,它包含其他行的总数,

代码语言:javascript
复制
SELECT companyID, 
CASE WHEN companyID IS NULL THEN 
    sum(Total_hours)
ELSE
    sum(Total_hours) * -1
END

FROM 
(           
    SELECT companyID,SUM(projects.hours) AS total_hours,  
    FROM  projects 
    GROUP BY  projects.companyID 
    ORDER BY total_hours DESC WITH ROLLUP LIMIT 5 
    UNION ALL
    SELECT null,SUM(projects.hours)*-1 total_hours FROM projects  
)
GROUP BY companyID
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6690514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档