【问题标题】:mysql sum values of field, according to other fields restrictionsmysql对字段求和值,根据其他字段限制
【发布时间】:2017-03-28 18:26:07
【问题描述】:

我有一张生日和日期的表格,每个新的一天都会为所有生日添加一条新记录,年龄是(日期减去生日)。 此外,每个新日期,同一天创建一个新生日,年龄为 0。 下表为示例:

Age | BirthDay     | Date         | Users
---------------------------------------------
0   | 2017-01-01   | 2017-01-01   | 100
1   | 2017-01-01   | 2017-01-02   | 70
2   | 2017-01-01   | 2017-01-03   | 50
0   | 2017-01-02   | 2017-01-02   | 40  
1   | 2017-01-02   | 2017-01-03   | 10
0   | 2017-01-03   | 2017-01-03   | 50

现在,我想知道到达该日期的每个生日的 0 岁用户总数,按年龄分组。

结果:

Age | Age0Sum
--------------
0   | 190
1   | 140
2   | 100

解释:

  • Age 0 -> 所有生日在第 0 天都有值,因此 Age0Sum 是 Age=0 用户数的总和 => 100 + 40 + 50

  • 1 岁 -> 生日 2017-01-01 + 2017-01-02 已达到 1 岁,因此 Age0Sum 将是他们在第 0 天的用户数量 => 100 + 40

  • 2 岁 -> 只有一个生日日期 (2017-01-01) 达到 2 岁,因此他们的 Age0Sum 将仅是该生日 0 岁 => 100 的用户

我尝试了很多东西,现在尝试更多,但没有找到具体的解决方案或正确的方法。

感谢您的帮助。

【问题讨论】:

  • 我不明白应用的逻辑。它似乎与表中找到的最小日期或最小出生日期或最大日期或最大出生日期有关。正确的?如果有,是哪个?

标签: mysql sql


【解决方案1】:

假设表名是 UsersTable。

SELECT 
    u1.Age,
    SUM(u2.Users)
FROM
    UsersTable AS ut1
        JOIN
    (SELECT 
        BirthDay, Users
    FROM
        UsersTable
    WHERE
        Age = 0) AS ut2 ON ut1.BirthDay = ut2.BirthDay
GROUP BY Age
ORDER BY Age;

内部选择将获取 Age = 0 时每个生日的用户数。 然后,与它的加入将获取所有达到该组年龄的记录,并从之前的选择中总结年龄。

【讨论】:

    猜你喜欢
    • 2022-10-16
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 2023-03-30
    • 2011-01-20
    相关资源
    最近更新 更多