如何从 sql 查询中删除重复值

Posted

技术标签:

【中文标题】如何从 sql 查询中删除重复值【英文标题】:How to remove duplicate values from an sql query 【发布时间】:2016-11-06 15:58:25 【问题描述】:

我想知道如何从 sql 查询的输出中删除重复值。

这是 sql 查询:

$query = "SELECT useraccount.Username, tariff.Name as tariffs, 
energyconsumption.ElecEnergy, useraccount.Username as User
    FROM useraccount
    INNER JOIN tariff 
ON useraccount.tariffs = tariff.id
INNER JOIN energyconsumption
ON energyconsumption.User = useraccount.id
WHERE Date = CURRENT_DATE";

这是该查询的输出:

"results":["Username":"absc868","TariffName":"s1","ElecConsump":"2000",  
"Username":"absc868","TariffName":"s1","ElecConsump":"1900"]

如您所见,查询会过滤掉与今天日期匹配的数据。我们为同一用户提供 2 个输出。关税名称和用户名的值相同,但能耗值不同,这很好。

我想实现如下输出:

= "results":["Username":"absc868","TariffName":"s1","ElecConsump":"2000 +1900"


= "results":["Username":"absc868","TariffName":"s1","ElecConsump":"3900"

有人能指出我如何实现这一目标的方向吗?

提前感谢那些阅读帖子并做出贡献的人!

【问题讨论】:

您想对这些值求和还是希望它们为2000 +1900 @Dekel 嗨,是的,我想要值的总和 所以@scaisEdge 的答案就是你要找的。​​span> @Dekel 谢谢你的评论是忠诚的..我赞成你的回答..(答案的意思几乎是一样的) 嗯,不完全一样,因为他想要一个总和(而不是一个字符串[像他的例子中那样])。你在这里也得到了我的投票:) 【参考方案1】:

你可以使用group_concat函数:

$query = "SELECT useraccount.Username, tariff.Name as tariffs, 
GROUP_CONCAT(energyconsumption.ElecEnergy SEPARATOR ' +')
    FROM useraccount
    INNER JOIN tariff 
ON useraccount.tariffs = tariff.id
INNER JOIN energyconsumption
ON energyconsumption.User = useraccount.id
WHERE Date = CURRENT_DATE
GROUP BY useraccount.Username, tariff.Name";

【讨论】:

【参考方案2】:

你应该使用 sum 和 group by

$query = "SELECT useraccount.Username as Username, tariff.Name as TariffName, 
sum(energyconsumption.ElecEnergy) as ElecConsump
    FROM useraccount
    INNER JOIN tariff 
ON useraccount.tariffs = tariff.id
INNER JOIN energyconsumption
ON energyconsumption.User = useraccount.id
WHERE Date = CURRENT_DATE
GROUP BY useraccount.Username, tariff.Name as tariffs";

(表列名别名和对象属性名有些区别)

【讨论】:

太棒了!非常感谢!我能问你最后一个问题吗?我测试了查询,我得到了一个错误。这是查询后的其余代码: $result = mysqli_query($conn,$query); $r = 数组(); if($result->num_rows) while($row = mysqli_fetch_array($result)) array_push($r, array( 'Username' => $row['Username'], 'TariffName' => $row['关税'], 'ElecConsump' => $row['ElecEnergy'] )); echo json_encode(array('results' => $r));错误在这一行: if($result->num_rows) @Mahbs 好吧,如果我的回答是正确的,请将其标记为已接受...看看这里如何meta.stackexchange.com/questions/5234/… @Dekel 可以。谢谢! @scaisEdge 完成。再次感谢您的帮助! @Mahbs 。如果您还有其他问题,请发布适当的新问题.. 所以所有 SO 用户都可以帮助您

以上是关于如何从 sql 查询中删除重复值的主要内容,如果未能解决你的问题,请参考以下文章

如何更改我的 sql 查询,以便删除列中具有某些值的行 [重复]

如何从查询中删除重复值

连接多个表后如何从sql查询结果中删除重复记录

SQLserver数据库中所有字段全部一样的重复数据如何删除?

查询及删除重复记录

如何从 SQL Server 中的表中删除重复行 [重复]