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

标签 sql mysql dataset group-by grouping

我不认为这是可能的,但我想证明不是这样。

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

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

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

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

Year    Quarter    Total
2008    Q1         20
        Q2         25
        Q3         35
        Q4         40
2009    Q1         15
        Q2         20
        Q3         30
        Q4         35

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

最佳答案

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

@r 这里是一个 session 变量。您可以在 MySQL 中使用它们,就像在任何过程语言中使用任何变量一样。

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

其次,它在 SELECT 子句中被选中。如果@r的当前值不等于year,则输出year,否则为NULL输出。

第三,它更新为 year 的当前值。

关于sql - MySQL - 仅在每个分组值的第一个实例中显示字段值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/916000/

相关文章:

Delphi:使用TClientDataset作为内存数据集

c# - 如何将 float 作为小时相加,输出小时分秒

sql - 在SQLite日期算法中使用'现在'

sql - MSSQLSRV - 过滤掉重复行的结果

mysql - 修剪(两者)不修剪主角

Java - 对象比较算法

c# - 为什么Session变量会更新?

sql - 存储过程中 exec 内的临时表的作用域规则是什么?

mysql - 代码点火器 :Using defined constants for table names in a join call

python - SQLAlchemy select_from 单个表