使用concat从子查询返回多个值

fruv7luv  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(381)

我有一个php/mysql应用程序
应用程序使用查询来获取表的值 leads ,使用2个子查询返回第二个表中的值的总和和计数 refunds 这两个表用外键链接 lead_id ```
SELECT l.,
IFNULL(
(SELECT SUM(amount)
FROM refunds r
WHERE l.lead_id = r.lead_id),0) amount_refunded,
IFNULL(
(SELECT COUNT(
)
FROM refunds r
WHERE l.lead_id = r.lead_id),0) number_refunded
FROM leads l

我想提高这个查询的性能。
我的想法是:
使用concat和管道分隔符将这两个子查询组合成一个子查询
在应用程序级别使用php分解返回的字符串以获得2个值。
示例如下:

SELECT l.,
(SELECT CONCAT(IFNULL(COUNT(
),0),'|', IFNULL(SUM(amount),0))
FROM fee_refunds r
WHERE l.lead_id = r.lead_id) values_refunded
FROM fee_leads l

然后在应用程序中,在循环中:

list($amount_refunded, $number_refunded) = explode('|', $row->values_refunded);

这种方法可行,但我的问题是:
这种形式不好吗?
我有什么理由不这样做吗?
有更好的解决办法吗?
njthzxwz

njthzxwz1#

使用 join !

SELECT l.*, r.amount_refunded, r.number_refunded
FROM leads l LEFT JOIN
     (SELECT lead_id, COUNT(*) as number_refunded, SUM(amount) as amount_refunded
      FROM refunds r
      GROUP BY lead_id
     ) r
     ON l.lead_id = r.lead_id;

在某些情况下,你可能会发现 join 在聚合之前。

相关问题