繁体   English   中英

选择仅按列分组,而不是聚合

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM