MySQL - 仅在每个分组值的第一个实例中显示字段值?

Bry*_*ynJ 2 mysql sql grouping group-by dataset

我不认为这是可能的,但我想以其他方式证明这一点.

我编写了一个简单的报告查看类来输出各种数据库查询的结果.为了改善显示效果,当我有一个包含分组数据的报表时,我想在每个唯一值的第一行显示字段值 - 我想在查询级别执行此操作,否则它会在我的班级中需要额外的逻辑来确定这些特殊值.

用一个简单的例子说明我的要求可能会有所帮助.想象一下这个数据集:

Year    Quarter    Total
2008    Q1         20
2008    Q2         25
2008    Q3         35
2008    Q4         40
2009    Q1         15
2009    Q2         20
2009    Q3         30
2009    Q4         35
Run Code Online (Sandbox Code Playgroud)

如果可能的话,我希望将数据集返回为:

Year    Quarter    Total
2008    Q1         20
        Q2         25
        Q3         35
        Q4         40
2009    Q1         15
        Q2         20
        Q3         30
        Q4         35
Run Code Online (Sandbox Code Playgroud)

有没有办法在MySQL中以编程方式执行此操作?

Qua*_*noi 7

SELECT  CASE WHEN @r = year THEN NULL ELSE year END AS year,
        quarter,
        total,
        @r := year
FROM    (
        SELECT  @r := 0
        ) vars,
        mytable
ORDER BY
        year
Run Code Online (Sandbox Code Playgroud)

@r这是一个会话变量.您可以MySQL像任何过程语言中的任何变量一样使用它们.

首先,它在子查询中初始化为零.

其次,它在SELECT条款中进行了检查.如果当前值@r不等于year,则year输出,否则NULL输出.

第三,它用当前值更新year.