我必须进行一些报告,涉及各种表,并具有几个SUM,COUNT等,一切正常。但是,我要解决的最后一件事是对SUM的求和,这不在分组的列中。
我会给你一个例子(从我现有的内容中摘录下来),以便您可以理解上一段中的绕口令。
假设我有一个包含几个联接的查询,这些联接使我得到此结果,一个临时表或任何其他内容:
(这是精简版,在原始版本中,我有更多列和groupbys)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)为TotalPrice
,
COUNT(DISTINCT APP_ID)作为CountOfApps
,
(通过APP_ID一次将(APP_END-APP_START)的总和作为TimeInMinutesByCategory
从
MyTable
通过...分组
CAT_ID
结果必须给我这个:CAT_ID CAT_DESCRIP TotalQTY TotalPrice CountOfApps TimeInMinutesByCategory 1 Categ One 35 300.00 1 60 2 Categ Two 27 220.00 2 180
谢谢你的帮助!
最佳答案
我认为这可以完成工作...否则,对max(app_start)的sytnax进行一些调整-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
关于mysql - 按各个列分组(具有各种联接),但将不同的其他列求和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22919355/