我正在使用 MySQL 8.0 并执行带有总计和小计的选择查询,因此它是关于with rollup
语句的。
问题在于表达式在除分组 ID 为 1 的行(即“总收入”行)之外的所有行中IF(GROUPING(id)=1, "Total revenue", diagnosis_name)
返回相同的值。此外,如果我在没有(例如 0=0)的diagnosis_name
情况下设置假条件,结果是正确的。GROUPING
如果我diagnosis_name
完全不使用条件语句,也会发生同样的情况。
类似的问题发生在 上group_concat
,不知原因是否相同。
这是查询结果,_true
列显示正确的值
ID | appointment_id_true | 预约编号 | 预约_诊断 | 收入 | appointment_diagnosis_true |
---|---|---|---|---|---|
2个 | 1个 | 5个 | Туберкулез | 350.00 | Лрипп |
2个 | 12 | 5个 | Туберкулез | 0.00 | Туберкулез |
2个 | 1, 12 | 总收入 | 350.00 | Туберкулез | |
3个 | 11 | 5个 | Туберкулез | 0.00 | Диарея |
3个 | 11 | 总收入 | 0.00 | Диарея | |
4个 | 5个 | 5个 | Туберкулез | 120.00 | Наркотическая зависимость |
4个 | 5个 | 总收入 | 120.00 | Наркотическая зависимость | |
全部的 | 1, 5, 11, 12 | 总收入 | 470.00 | Наркотическая зависимость |
不确定将 SQL 查询放在这里是否是个好主意,所以在 DB Fiddle 上查看
有什么注意事项,我怎样才能使它按照 sql 查询描述的方式工作?
不要打扰
WITH
。使用GROUP BY
和WITH ROLLUP
。然后测试NULL
以识别“总计”行。不确定你想达到什么目的,但我会从:
如果您想使用 group_concat 进一步聚合,我会在外部级别进行:
看起来,在使用时,您只能使用指定要分组的聚合函数或列。
GROUP BY
我更新了我的 SQL 查询,所以现在它使用聚合函数,例如
MAX
, 和CASE
条件来处理小计中的非分组值,如NULL
.因此,这是解决方案: