根据另一个 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
我正在考虑使用来自 t1
的 GROUP 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);
我有一个 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
我正在考虑使用来自 t1
的 GROUP 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);