在涉及聚合的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
)
...但由于子查询选择了id(我想要的)和总数(我没有),因此失败并出现错误Operand should contain 1 column(s)
。我可以以任何方式从子查询结果中排除total
吗?
编辑:如果可能的话我宁愿避免使用连接 - 将where子句传递给另一个现有的函数。
道歉,如果这是一个骗局 - 我做了搜索,诚实。我无法在大量的SQL聚合问题中找到确切的答案。
答案 0 :(得分:3)
您的查询应该是这样的:
select idclient, business_name from client where idclient in
(
select idclient
from payment
group by idclient
having sum(amount) > 100
)
你需要将聚合函数放在having子句中,在子查询中你需要选择与where子句相同的列数。
答案 1 :(得分:1)
WHERE idclient IN (...)
(...)
内的内容是子查询。显然它应该只返回一列,因为IN子句只需要一列数据。
您可以通过以下方式省略总列数:
SELECT idclient
FROM payment
GROUP BY idclient
HAVING SUM(amount) > 100
答案 2 :(得分:0)
你也可以尝试这个:
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