mysql - 如何构造具有不同聚合的 SQL 查询

标签 mysql sql tsql

我有以下数据:

 Date   ID Type Cost
 May 01   a  A    1
 May 01   b  A    2
 May 01   c  B    3
 May 01   d  B    4
 May 02   e  A    5
 May 02   f  A    6
 May 02   g  B    7
 May 02   h  B    8

我想要一个显示的查询

Date       Type CostPercentage
May 01    A    (1+2) / (1+2+3+4)
May 01    B    (3+4) / (1+2+3+4)
May 02    A    (5+6) / (5+6+7+8)
May 02    B    (7+8) / (5+6+7+8)

我目前拥有的是

select Date, Type, sum(cost)
from mytable
group by Date, Type

我真的很想显示百分比,但这将涉及除掉另一个本身就是聚合的数字。

我应该怎么做?

已编辑以反射(reflect)我的实际问题。我之前过度简化了它。

最佳答案

您可以使用子查询:

select  dt.Date
,       dt.Type
,       SUM(dt.Cost) as DayTypeTotal
,       (select SUM(Cost) from @t d where d.Date = dt.Date) as DayTotal
,       100.0 * SUM(dt.Cost) / 
             (select SUM(Cost) from @t d where d.Date = dt.Date) as Percentage
from    @t dt
group by
        dt.Date
,       dt.Type

链接到 working example @odata .

关于mysql - 如何构造具有不同聚合的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5244837/

相关文章:

c# - 如何计算数据库中具有 3 个不同值的列中的数据并将其显示在图形中?

php - 加载iframe(谷歌地图)存储在从mysql加载到链接div中的变量中

php - mySQL INNER JOIN 是更好的选择吗?

sql - 如何从临时表中获取最近插入的列的值?

mysql - 在sql中比较同一个表中的两列时如何选择

sql - 选择属性之间没有逗号?

sql - 按日期范围分组 (teradata)

mysql - 在数据库中将 nvarchar(MAX) 更改为 nvarchar(n)

sql - Sql Select 查询中的多个日期范围

sql-server - 从多个表中选择逗号分隔