根据另一个 table 的聚合更新 table

Update table based on aggregation from another table

我有一个 table t1 这样的:

Names    Drug 

Tom      A
Tom      A
Tom      B
Lily     B
Lily     B

和 table t2 这样的:

Names    Drug   COUNT(Drug)

Tom      A
Tom      B
Tom      C
Lily     A
Lily     B

我想将 t1 中按药物和名称分组后的数据插入到 t2 的 COUNT(drug) 列中。 t2 的期望输出如下所示:

Names    Drug   COUNT(Drug)

Tom      A      2
Tom      B      1
Tom      C      0
Lily     A      0
Lily     B      2

我正在考虑使用来自 t1GROUP BY drug, name 数据创建另一个 table t3,然后根据 t3 更新 t2但是很费时间。

任何时候遇到这样复杂的问题,您都应该尝试将其分解成您可以解决的更小的部分,然后将它们重新组合起来。

例如,我将从第一个 table 开始获取 name/drug 计数,如下所示:

SELECT name, drug, COUNT(*) AS numDrugs
FROM t1
GROUP BY name, drug;

然后,您可以在更新 t2 时将其用作子查询,方法是在名称和药物匹配的条件下连接两个 table。您应该使用 leftjoin 和 coalesce 函数将不存在的值替换为 0:

UPDATE t2
LEFT JOIN(
  SELECT name, drug, COUNT(*) AS numDrugs
  FROM t1
  GROUP BY name, drug) t1 ON t1.name = t2.name AND t1.drug = t2.drug
SET drugCount = COALESCE(numDrugs, 0);

这是一个 SQL Fiddle 示例。

我觉得这个问题可以帮到你:specific mysql update based on group by data

你可以这样做:

UPDATE t2
LEFT JOIN
(
   SELECT name, drug, count(*) num
   FROM t1 
   GROUP BY name, drug
) r ON  t2.name = r.name AND t2.drug = r.drug 
SET t2.count_drag = COALESCE(r.num, 0);