我有一张这样的桌子:
Names Drug
Tom A
Tom A
Tom B
Lily B
Lily B
还有一张这样的桌子:
Names Drug COUNT(Drug)
Tom A
Tom B
Tom C
Lily A
Lily B
我想在t2的
t1
列中插入按药物和名称分组后来自t1的数据。t2的期望输出如下所示:Names Drug COUNT(Drug)
Tom A 2
Tom B 1
Tom C 0
Lily A 0
Lily B 2
我正在考虑用
t2
中的COUNT(drug)
数据创建另一个t3
表,然后根据GROUP BY drug, name
更新t1
,但这非常耗时。 最佳答案
每当你遇到这样一个复杂的问题,你都应该试着把它分解成你能解决的小块,然后再把它们放在一起。
例如,我首先从第一个表中获取名称/药物计数,如下所示:
SELECT name, drug, COUNT(*) AS numDrugs
FROM t1
GROUP BY name, drug;
然后,您可以在更新t2时将其用作子查询,方法是在名称和药物匹配的情况下连接两个表。您应该使用LeaveJoin和CueSeCe函数替换不存在的值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示例。