【问题标题】:SQL WHERE SUM(value) from table where value is distinct?SQL WHERE SUM(value) from table where value is distinct?
【发布时间】:2017-04-28 08:14:35
【问题描述】:

我知道标题很奇怪,但我真的不知道如何解释我的问题。 我的应用程序有问题,我必须更改此请求。

    SELECT DISTINCT utilisateurs.id, nom, prenom, SUM(pointages.nombre) as heuresConsommees
                        FROM utilisateurs
                        INNER JOIN pointages on pointages.cp = utilisateurs.cp                      
                        WHERE pointages.idPrestation = %d
                        AND pointages.id_affaire = %d
                        AND utilisateurs.id = %d
                        GROUP BY utilisateurs.nom,prenom, utilisateurs.id

我的问题是值 pointages.nombre 可以在数据库中插入两次,对于相同的事务、prestation 和周。 我无法在不修改我的应用程序的所有架构的情况下修改允许这种双重插入的请求,所以我想知道这是否可以选择值 pointages.nombre 的总和但无需第二次。可能有一个独特的但我不知道在这种情况下该怎么做。 提前致谢。

【问题讨论】:

  • 确实需要执行 SELECT DISTINCT,因为 GROUP BY 不会返回重复项。
  • 添加一些示例表数据和预期的结果!
  • pointages 中是否可以有多个 VALID 条目?还是总是多次插入一个(nombre)条目?你能告诉我们pointages的结构吗?
  • 积分中可以有多个条目,但它们不是真正有效的,不得出现。该应用程序的目的是检查员工工作了多少小时。并且系统允许上级修改他们工作的小时数,但是当他这样做时,请求将两者都计算在内。如果员工说他工作了 5 个小时,而上级说他只工作了 4 个小时,那将是 9 个。将另一个请求从插入更改为更新会更容易,但是应用程序是围绕这个请求进行的,如果我更改它,我将不得不改变所有的架构。
  • 所以实际上,您只希望每个“条件”中的pointages 中的最后一个条目?

标签: sql sum distinct where


【解决方案1】:

从内部查询中删除 Group by 并使用内部查询来获取不同的行

试试这个:-

SELECT id, num,prenom,SUM(nombre) as heuresConsommees
from
( 
SELECT DISTINCT utilisateurs.id, nom, prenom, pointages.nombre
                        FROM utilisateurs
                        INNER JOIN pointages on pointages.cp = utilisateurs.cp                      
                        WHERE pointages.idPrestation = %d
                        AND pointages.id_affaire = %d
                        AND utilisateurs.id = %d
) a
Group by id, num,prenom;

【讨论】:

  • 它不起作用,Wampserver 返回此错误:查询失败:ERREUR:列 «pointages.nombre» 必须在子句 GROUP BY 中或必须在 agregat 函数中使用。
  • @Lucien Serre-Fortier 我已经更新了查询。再检查一遍
  • 它工作正常。谢谢你的回答,很完美:)
  • @LucienSerre-Fortier 这不适用于您提供的示例。上级放 4 小时,而员工说 5 小时。你还有 9 个小时
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-05
  • 2020-09-26
  • 2017-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多