【发布时间】:2019-11-04 17:38:05
【问题描述】:
我正在尝试创建一个汇总输出以根据子查询中的值显示总计,然后按标签对输出进行分组
查询如下:
select c.name,
(select sum(duration) from dates d
inner join time t1 on d.time_id=t1.id
where d.employee=t.employee
and d.date >= now() - INTERVAL 12 MONTH) as ad,
(select sum(cost) from dates d
inner join time t1 on d.time_id=t1.id
where d.employee=t.employee
and d.date >= now() - INTERVAL 12 MONTH) as ac
FROM time t
inner join employees ee on t.employee=ee.employee
inner join centres c on ee.centre=c.id
where
ee.centre in (4792,4804,4834) group by c.centre
我希望它显示每个中心的广告和 ac,但它只显示列表中最后一个中心的 ac 值,其余显示为零
如果我删除该组,然后我会得到所有条目的列表,但它不会以任何方式汇总,我需要那个汇总视图
【问题讨论】:
-
可能学会正确地格式化你的代码,并学会使用正确的
GROUP BY。您的代码甚至不会在其他 dbms 中运行。即使是较新版本的MySQL也不会运行您的代码。 -
如果目标是得到
centre的总数,您似乎希望在子查询中加入employees和centres。如果没有示例数据和示例输出,我们所要做的就是返回意外结果的 SQL。如果没有规范,我们只是在猜测需求,我们可能提出的任何 SQL 更改都只是猜测。 -
我认为问题的症结在于
GROUP BY正在折叠行,而折叠的集合包括具有各种t.employee值的行。 MySQL 特定的非标准扩展允许查询运行而不会引发错误;对于折叠集,相同的扩展只获得了t.employee的单个值,这就是传递给 SELECT 列表中的子查询的值。但是(再次)没有规范,我们只是猜测这个查询应该实现什么。