我有一个像这样的表t1
:
Names Drug
Tom A
Tom A
Tom B
Lily B
Lily B
和一个像这样的表 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
数据创建另一个表 t3
,然后更新 t2
基于 t3
但它非常耗时。
最佳答案
任何时候遇到像这样的复杂问题,您都应该尝试将其分解成您可以解决的更小的部分,然后将它们重新组合起来。
例如,我会像这样从第一个表中获取名称/药物计数:
SELECT name, drug, COUNT(*) AS numDrugs
FROM t1
GROUP BY name, drug;
然后,您可以在更新 t2 时将其用作子查询,方法是在 name 和 drug 匹配的条件下连接两个表。您应该使用 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示例。
关于mysql - 根据另一个表的聚合更新表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30510567/