我有一张这样的桌子:

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示例。

10-06 09:10