我有一张像这样的表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
我正在考虑使用t3
中的GROUP BY drug, name
数据创建另一个表格t1
,然后根据t2
更新t3
,但现在很有时间 - 耗时。
答案 0 :(得分:2)
任何时候你都遇到这样一个复杂的问题,你应该总是尝试将它分解成可以解决的小块,并将它们重新组合在一起。
例如,我首先从第一个表中获取名称/药物计数,如下所示:
SELECT name, drug, COUNT(*) AS numDrugs
FROM t1
GROUP BY name, drug;
然后,在通过在名称和药物匹配的条件下连接两个表来更新t2时,可以将其用作子查询。您应该使用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示例。
答案 1 :(得分:2)
我认为这个问题可以帮助您: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);