You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用MySQL的GROUP BY实现奇数列自定义输出及按日数据汇总

实现自定义分组输出的MySQL解决方案

结合你的示例数据和期望输出,我来帮你拆解如何用GROUP BY实现需求:

1. 先明确需求细节

从你的示例来看,Count(numbers)实际是当日所有numbers的总和(比如2018-04-20的10+15=25),而每个日期对应的info是该日期下最后一条记录的info(按id降序取第一条)。

2. 方案一:兼容MySQL 5.7及以下版本(子查询方式)

如果你的MySQL版本不支持窗口函数,可以用子查询来获取每个日期对应的目标info:

SELECT 
    SUM(numbers) AS `Count(numbers)`,
    DATE(datetime) AS `date`,
    -- 子查询获取当前日期下id最大的那条记录的info
    (SELECT info 
     FROM daily_dimension d2 
     WHERE DATE(d2.datetime) = DATE(d1.datetime) 
     ORDER BY id DESC 
     LIMIT 1) AS info
FROM daily_dimension d1
GROUP BY DATE(datetime);

3. 方案二:MySQL 8.0+版本(窗口函数更简洁)

如果你的MySQL是8.0或以上,用窗口函数可以更高效清晰地实现:

WITH ranked_daily_data AS (
    SELECT 
        -- 按日期分组计算numbers总和
        SUM(numbers) OVER (PARTITION BY DATE(datetime)) AS total_numbers,
        DATE(datetime) AS `date`,
        info,
        -- 给每个日期内的记录按id降序排名
        ROW_NUMBER() OVER (PARTITION BY DATE(datetime) ORDER BY id DESC) AS row_rank
    FROM daily_dimension
)
-- 只取每个日期排名第一的记录
SELECT 
    total_numbers AS `Count(numbers)`,
    `date`,
    info
FROM ranked_daily_data
WHERE row_rank = 1;

4. 输出结果验证

执行上述SQL后,你会得到如下结果,和你的期望格式完全匹配:

Count(numbers)dateinfo
252018-04-20Slow
262018-04-21Avg
302018-04-22Finish
72018-04-23Fly

灵活调整说明

如果你需要选择info的规则不是按id降序,而是其他条件(比如优先取某类info),只需要修改子查询或窗口函数的ORDER BY条件即可。

内容的提问来源于stack exchange,提问作者Bahirji Naik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:16:01