mysql - 尝试使用用户定义的变量获取连接的主键

标签 mysql sql

我有一个使用分组依据的 SQL 查询。我想做的是引入一个额外的列,该列将结果集中所有列的 id 用 , 分隔符连接起来。
我尝试过以下变体:

set @vals='';  
select @vals:=concat(@vals,',',id),id,payment_num, sum(amount) from payments  
group by id,payment_num,  
having processed > 0;  

我在第一列中不断收到null。我尝试了 set @vals:=' ' 即带有空格,但它也失败了。
我做错了什么。
我的目的是获取以逗号分隔返回的所有结果集的 id。

最佳答案

只需将 group_concat() 与子查询结合使用即可。它是为此目的而设计的:

select id, payment_num, sum(amount),
       (select group_concat(id) from payments where processed > 0) as ids
from payments  
where processed > 0
group by id, payment_num;

不过,我必须说,这是一个不寻常的请求。为什么您希望列出的 ID 仅分隔每一行,以及包含完整列表的列?

编辑:

你的评论是错误的。为了做你想做的事,你需要做这样的事情:

select id, payment_num, sum(amount),
       (select group_concat(id) from payments having sum(processed > 0) = count(*)) as ids
from payments  
group by id, payment_num
having sum(processed > 0) = count(*);

您的版本从任意行中选择processed 的值并将其用于比较。我的第一个版本将包含已 processed > 0 的任何组。此版本要求所有行均已processed > 0。您可以使用以下方法之一获得相同的效果:

having min(processed > 0) > 0;
having min(processed > 0) = 1;
having min(processed > 0);
having max(processed <= 0) = 0;

我认为带有 count(*) 的版本是最容易阅读的。

编辑二:

解决仅从处理所有内容的组获取 id 的问题。因此,基本上将原始查询引入为子查询:

select id, payment_num, sum(amount),
       (select group_concat(id)
        from (select id, payment_num
              from payments
              group by id, payment_num
              having sum(processed > 0) = count(*)
             ) idpn
       ) as ids
from payments  
group by id, payment_num
having sum(processed > 0) = count(*);

这很恶心,但正如我在答案的第一个版本中所问的那样,将 id 列表放在每一行似乎是一个不寻常的需求,因为每个 id 都有一个单独的行。此外,您可能会得到重复项,因此您需要 group_concat(distinct id) 删除它们。

此外,大多数其他数据库都支持 with 语句,这将大大简化查询。

关于mysql - 尝试使用用户定义的变量获取连接的主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20315077/

相关文章:

php - Magento 2 不访问数据库中的产品

mysql - 删除名称中带逗号的索引

sql - 这怎么可能是一个数字?

sql - 如何在 sql 中使用子查询创建约束?

php - 从 Propel 的结果集中排除连接关系对象的方法?

mysql - 解释为什么mysql查询结果看起来像分组数据

mysql - 限价/订单动态字段的慢速 SQL 查询(从 X 点开始的坐标)

javascript - jqGrid如何根据状态数据动态填充选项列表?

MySQL 多重选择不工作

SQL 查询 : calculating percentage