[英]Select grouped by column only, not the aggregate
在涉及聚合的MySql select语句中,是否可以仅选择按列分组而不进行聚合?
基本上我想根据基于聚合的标准在子查询中选择ID,在这种情况下是对客户的总付款:
select idclient, business_name from client where idclient in
(
select idclient, sum(amount) as total
from payment
group by idclient
having total > 100
)
...但是失败并且错误Operand should contain 1 column(s)
因为子查询选择了id(我想要的)和总数(我没有)。 我可以以任何方式从子查询结果中排除total
吗?
编辑:如果可能的话我宁愿避免使用连接 - 将where子句传递给另一个现有的函数。
抱歉,如果这是一个骗局 - 我确实搜索过。 我在大量的SQL聚合问题中找不到确切的答案。
您的查询应该是这样的:
select idclient, business_name from client where idclient in
(
select idclient
from payment
group by idclient
having sum(amount) > 100
)
您需要将聚合函数放在having子句中,在子查询中,您需要选择与where子句相同的列数。
WHERE idclient IN (...)
里面的东西(...)
是一个子查询。 显然它应该只返回一列,因为IN子句只需要一列数据。
您可以通过以下方式省略总列:
SELECT idclient
FROM payment
GROUP BY idclient
HAVING SUM(amount) > 100
你也可以尝试这个:
SELECT c.idclient, c.business_name
FROM payment p
INNER JOIN client c ON c.idclient = p.idclient
GROUP BY c.idclient, c.business_name
HAVING SUM(p.amount) > 100
并且,因为client.idclient
列看起来非常像PK,所以您甚至可以省略GROUP BY中的client.business_name
。 所以最终的查询看起来像这样:
SELECT c.idclient, c.business_name
FROM payment p
INNER JOIN client c ON c.idclient = p.idclient
GROUP BY c.idclient
HAVING SUM(p.amount) > 100
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.