【问题标题】:Subquery returns more than 1 row in group by clause - MySQL子查询在 group by 子句中返回超过 1 行 - MySQL
【发布时间】:2017-06-06 02:58:06
【问题描述】:

我正在尝试使用每个日期的正确金额总和来获得我的预期查询结果,但是,当它检测到相同的 ID 时,金额会不断增加。我想按日期获取组。不幸的是,当我运行查询时,出现错误提示 子查询返回超过 1 行

这是我的查询:

 SELECT a.DOB as `DATE`, (CASE when f.INHOUR > 12 or f.INHour = 12 Then 'PM' 
else 'AM' END) as Shift, concat(b.FIRSTNAME, ' ', b.LASTNAME) Fullname, 
a.Amount as DECLARED, SUM(c.Amount) as CALCULATED, 
a.AMOUNT as `NET OF SPECIAL SALES`, 
d.Amount as `CASH OVER SHORT`,
a.AMOUNT as `CASH DEPOSIT`,
(SELECT SUM(gndrevn.AMOUNT) from gndrevn where gndrevn.ID= b.ID and 
gndrevn.type = "4" group by gndrevn.DOB, gndrevn.ID) as `TRANSACTION COUNT (POS)`
FROM gndsale a 
INNER JOIN emp b ON a.ID= b.ID 
INNER JOIN gndsale c ON b.ID= c.ID
INNER JOIN gndsale d on b.ID = d.ID
INNER JOIN adjtime f on a.ID= f.ID
WHERE a.type = "22" AND c.type = "4" AND d.type = "42" and 
STR_TO_DATE(a.DOB, '%m/%d/%Y') BETWEEN '2017-05-01' AND '2017-05-31' GROUP BY DECLARED 
order by STR_TO_DATE(a.DOB, '%m/%d/%Y')

它返回此错误:

我试图删除 gndrevn.DOB, gndrevn.ID ,这是我的结果

Transaction Count POS 列刚刚添加,因为它在表中检测到相似的 ID。

我想要的 Transaction Count POS 结果是这样的:

我使用不同的查询来运行它,但它还需要在 select 语句中使用 group by

这是查询:

SELECT ID as `EMPLOYEE`, sum(AMOUNT) as AMOUNT, DOB as DATE from gndrevn 
where ID in (select ID from gndsale) and type = "4" group by 
DOB, ID order by STR_TO_DATE(DOB, '%m/%d/%Y')

我认为我的 group by 语句有问题来获取查询。任何人都可以帮助我吗? :(

【问题讨论】:

  • 您的查询一团糟。错误消息很清楚:您拥有的子查询返回多条记录。这需要修复。

标签: mysql sql select join group-by


【解决方案1】:

我认为您想要的是从 GROUP BY 中删除 gndrevn.DOB 并在 WHERE 中添加 gndrevn.DOB = a.DOB。

【讨论】:

  • 哇!有效!! :D 谢谢! :D 我没有想到 :( 我对我的 group by 条款考虑得太深了 :(
  • 在深入思考的同时,我注意到我的 CALCULATED 列也不同步.. 它添加了具有相同 ID 的记录,但是,我也想使用日期来确定它....这个解决方案可行吗?
  • 你可以使用和以前一样的方法。只需相应地替换列和表名。
  • 好的。我会尽力做到这一点......稍后我会给你一个关于我的查询的更新:)再次感谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多