gpt4 book ai didi

mysql查询,我得到的行数等于同一个表的一行

转载 作者:太空宇宙 更新时间:2023-11-03 11:34:54 24 4
gpt4 key购买 nike

我可以有一个 mysql 查询,我可以在其中获取行数,值等于同一个表的一行。

请检查我的以下查询,我可以优化它吗?加载时间很长

SELECT CASE
WHEN
table1.issue_type = 'email'
THEN
(SELECT Count(tabl1a.id) FROM table1 AS table1a WHERE table1a.email = table1.email)
ELSE
(SELECT Count(table1a.id) FROM table1 AS table1a WHERE table1a.phone_day = table1.phone_day)
END
AS emails
FROM table1

请多多指教

最佳答案

对于 select 子句中的此类相关子查询,通常的补救措施是通过加入执行聚合的子查询来重构。在这种情况下,实际上有两个不同的聚合正在执行,因此我们可以将连接留给两个子查询来执行聚合。

SELECT
t1.issue_type,
COALESCE(t2.email_cnt, t3.phone_cnt) AS emails
FROM table1 t1
LEFT JOIN
(
SELECT email, COUNT(*) AS email_cnt
FROM table1
GROUP BY email
) t2
ON t1.email = t2.email AND
t1.issue_type = 'email'
LEFT JOIN
(
SELECT phone_day, COUNT(*) AS phone_cnt
FROM table1
GROUP BY phone_day
) t3
ON t1.phone_day = t3.phone_day AND
t1.issue_type <> 'email'

此处的技巧是向连接条件添加条件以检查问题类型是否为电子邮件。这保证了您表中的每条记录都将连接到一个且仅一个子查询。我们使用 COALESCE 从电子邮件或电话日聚合中选择非 NULL 计数。

关于mysql查询,我得到的行数等于同一个表的一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46770937/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com