在单独的行记录中使用 GROUP_CONCAT
Using GROUP_CONCAT in separate row records
我在使用 GROUP_CONCAT 时遇到问题。我很确定这是获得我想要的东西的唯一方法,但它似乎没有给我我需要的结果。
这是我的声明:
SELECT
b.*,
GROUP_CONCAT(c.finance_code) AS finance_codes
FROM
`oc_finance_breakpoints` b
LEFT JOIN
`oc_finance_breakpoints_codes` c ON c.breakpoint_id = b.breakpoint_id;
这将在 finance_breakpoints table 中收集数据,结构如下:
breakpoint_id
from_value
to_value
minimum_deposit
以及我加入的多个“财务代码”table,finance_breakpoint_codes:
breakpoint_code_id
breakpoint_id
finance_code
断点可能有多个财务代码。当我 运行 和 sql 只有一个条目时,我得到以下信息:
1 | 280.00 | 750.00 | 10 | ONIF6,ONIF10,ONIF12
但是如果在断点 table 中有两个条目,所发生的只是将额外的财务代码附加到上面的末尾,这意味着我只能得到第一组数据的一行, 以及一栏中的所有财务代码。
理想情况下,我希望 return 像这样:
1 | 280.00 | 750.00 | 10 | ONIF6,ONIF10,ONIF12
2 | 750.00 | 1500.00 | 10 | ONIB12-9.9,ONIB24-9.9,ONIB36-9
而不是:
1 | 280.00 | 750.00 | 10 | ONIF6,ONIF10,ONIF12,ONIB12-9.9,ONIB24-9.9,ONIB36-9
有什么方法可以实现我想要的吗?我可能使用了错误的功能吗?
在您的查询中使用聚合函数(例如 GROUP_CONCAT
)可确保它将 return 聚合结果,而没有显式分组可确保它将 return 单个总体摘要行。
您需要在查询末尾添加一个 group by
子句 - 如下所示:
SELECT
b.*,
GROUP_CONCAT(c.finance_code) AS finance_codes
FROM
`oc_finance_breakpoints` b
LEFT JOIN `oc_finance_breakpoints_codes` c
ON c.breakpoint_id = b.breakpoint_id
GROUP BY b.breakpoint_id
我在使用 GROUP_CONCAT 时遇到问题。我很确定这是获得我想要的东西的唯一方法,但它似乎没有给我我需要的结果。
这是我的声明:
SELECT
b.*,
GROUP_CONCAT(c.finance_code) AS finance_codes
FROM
`oc_finance_breakpoints` b
LEFT JOIN
`oc_finance_breakpoints_codes` c ON c.breakpoint_id = b.breakpoint_id;
这将在 finance_breakpoints table 中收集数据,结构如下:
breakpoint_id
from_value
to_value
minimum_deposit
以及我加入的多个“财务代码”table,finance_breakpoint_codes:
breakpoint_code_id
breakpoint_id
finance_code
断点可能有多个财务代码。当我 运行 和 sql 只有一个条目时,我得到以下信息:
1 | 280.00 | 750.00 | 10 | ONIF6,ONIF10,ONIF12
但是如果在断点 table 中有两个条目,所发生的只是将额外的财务代码附加到上面的末尾,这意味着我只能得到第一组数据的一行, 以及一栏中的所有财务代码。
理想情况下,我希望 return 像这样:
1 | 280.00 | 750.00 | 10 | ONIF6,ONIF10,ONIF12
2 | 750.00 | 1500.00 | 10 | ONIB12-9.9,ONIB24-9.9,ONIB36-9
而不是:
1 | 280.00 | 750.00 | 10 | ONIF6,ONIF10,ONIF12,ONIB12-9.9,ONIB24-9.9,ONIB36-9
有什么方法可以实现我想要的吗?我可能使用了错误的功能吗?
在您的查询中使用聚合函数(例如 GROUP_CONCAT
)可确保它将 return 聚合结果,而没有显式分组可确保它将 return 单个总体摘要行。
您需要在查询末尾添加一个 group by
子句 - 如下所示:
SELECT
b.*,
GROUP_CONCAT(c.finance_code) AS finance_codes
FROM
`oc_finance_breakpoints` b
LEFT JOIN `oc_finance_breakpoints_codes` c
ON c.breakpoint_id = b.breakpoint_id
GROUP BY b.breakpoint_id