Mysql 仅选择“按列分组”,而不选择“聚合”

Mysql 仅选择“按列分组”,而不选择“聚合”,mysql,sql,subquery,aggregate-functions,Mysql,Sql,Subquery,Aggregate Functions,在涉及聚合的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 )

在涉及聚合的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
)
。。。但是这失败了,因为操作数应该包含1列,因为子查询同时选择了我想要的id和我不想要的总数。我可以以任何方式从子查询结果中排除total吗

编辑:如果可能的话,我希望避免使用join-where子句被单独传递到另一个现有函数上


如果这是一个骗局,我道歉-我确实搜索过,诚实。在大量的SQL聚合问题中,我找不到确切的答案。

您的查询应该是这样的:

select idclient, business_name from client where idclient 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
HAVING SUM(p.amount) > 100

您需要在having子句中放置聚合函数,在sub查询中,您需要选择与where子句中相同的列。

您的查询应如下所示:

select idclient, business_name from client where idclient in
(
  select idclient 
  from payment 
  group by idclient
  having sum(amount) > 100
)
WHERE idclient IN (...)
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
您需要将聚合函数放在having子句中,并在子查询中选择与where子句中相同的列

WHERE idclient IN (...)
里面的东西。。。是一个子查询。显然,它应该只返回一列,因为IN子句只需要一列数据

您可以通过以下方式忽略“总计”列:

SELECT idclient
FROM payment
GROUP BY idclient
HAVING SUM(amount) > 100
里面的东西。。。是一个子查询。显然,它应该只返回一列,因为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,您甚至可以从GROUPBY中省略client.business_名称。因此,最终的查询如下所示:

select idclient, business_name from client where idclient 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
HAVING SUM(p.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,您甚至可以从GROUPBY中省略client.business_名称。因此,最终的查询如下所示:

select idclient, business_name from client where idclient 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
HAVING SUM(p.amount) > 100

谢谢我不知道我是从哪里想到“having”只能使用选定的列:\Thank!我不知道我是从哪里想到“having”只能使用选定的列:\