通过各种列(具有各种连接)进行分组但是另外列其他列

时间:2014-04-07 17:38:23

标签: mysql sql

我必须做一些报告,涉及各种表格,并且有几个SUM,COUNT等等,一切都很好。但我要解决的最后一件事是由另一个不在分组列中的SUM。 我会给你一个例子(从我的内容中删除),这样你就可以理解前一段中的绕口令。

假设我有一个带有几个连接的查询,它可以得到这个结果,或者一个临时表,或者其他什么: (这是一个精简版,原版我有更多的专栏和小组)

APP_ID CAT_ID CAT_DESCRIP APP_START APP_END DETAIL_ID DET_QTY DETAIL_PRICE 1 1 Categ One 900 960 1 10 150.00 1 1 Categ One 900 960 2 8 20.00 1 1 Categ One 900 960 3 12 30.00 1 1 Categ One 900 960 4 5 100.00 2 2 Categ Two 600 720 5 12 150.00 2 2 Categ Two 600 720 6 10 50.00 3 2 Categ Two 1200 1260 7 5 20.00

我需要得到类似的内容:(粗体列很重要) SELECT CAT_ID, CAT_DESCRIP, SUM(DET_QTY) as TotalQTY, SUM(DETAIL_PRICE) as TotalPrice, COUNT(DISTINCT APP_ID) as CountOfApps, (GET THE SUM OF (APP_END - APP_START) ONLY ONE TIME BY APP_ID INTO THIS CATEG) as TimeInMinutesByCategory FROM MyTable GROUP BY CAT_ID

结果必须给我这个:

TotalQTY

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我认为这将完成这项工作......或者如果没有,对sytnax for max(app_start)稍微调整一下 - max(app_end)应该完成这项工作

这个想法是,通过app_id和cat_id汇总子查询中的数据。选择开始和结束的最大值,按app_id和cat_id分组。由于每个不同的app_id和cat_id对只有一个值,我们基本上只是重复数据删除。

然后,将子查询加入主查询并按类别ID汇总。

SELECT 
    a.CAT_ID,
    a.CAT_DESCRIP,
    SUM(a.DET_QTY) as TotalQTY,
    SUM(a.DETAIL_PRICE) as TotalPrice,
    COUNT(DISTINCT a.APP_ID) as CountOfApps,
    SUM(b.TimeInMinutesByCategory) AS TimeInMinutesByCategory
FROM
MyTable AS a
INNER JOIN (
     SELECT APP_ID, CAT_ID, max(app_start) - max(app_end) AS TimeInMinutesByCategory
     FROM MyTable
     GROUP BY APP_ID, CAT_ID) AS b
ON a.cat_id = b.cat_id
AND a.app_id = b.app_id
GROUP BY
    a.CAT_ID