https://chat.openai.com/g/g-vX7yfHNcC-code-wizard
https://poe.com/CodeWizardGPT
select
a.id,a.name,count(b.id),count(c.id)
from product a
LEFT JOIN
secretkey b
on a.id = b.productId
group by a.id
LEFT JOIN secretkey c
on a.id = c.productId
AND a.end_date > now()
AND now() >= a.start_date
group by a.id
这里有几个问题需要指出:
考虑到这些问题,我将重构您的查询。假设您想要计算每个产品的 secretkey 总数,以及满足特定日期条件的 secretkey 数量:
SELECT
a.id,
a.name,
COUNT(b.id) AS total_keys,
COUNT(CASE WHEN a.end_date > NOW() AND NOW() >= a.start_date THEN c.id ELSE NULL END) AS valid_keys
FROM product a
LEFT JOIN secretkey b ON a.id = b.productId
LEFT JOIN secretkey c ON a.id = c.productId
GROUP BY a.id, a.name
我们首先对 product 表和 secretkey 表进行了两次左连接,分别统计所有 secretkey 和满足日期条件的 secretkey。
使用 COUNT() 函数计算总的 secretkey 数量。
使用条件 COUNT()(通过 CASE 语句)来计算在指定日期范围内的 secretkey 数量。
只使用一个 GROUP BY 子句,包含了 a.id 和 a.name 两个字段。
在这里插入代码片
编程专业
正式语气
交互性
主要调试和解释