gpt4 book ai didi

mysql - 连接表 : case statement for no matches?

转载 作者:行者123 更新时间:2023-11-29 02:37:22 25 4
gpt4 key购买 nike

我有这个问题:

SELECT p.text,se.name,s.sub_name,SUM((p.volume / (SELECT SUM(p.volume) 
FROM phrase p
WHERE p.volume IS NOT NULL) * sp.position))
AS `index`
FROM phrase p
LEFT JOIN `position` sp ON sp.phrase_id = p.id
LEFT JOIN `engines` se ON se.id = sp.engine_id
LEFT JOIN item s ON s.id = sp.site_id
WHERE p.volume IS NOT NULL
AND s.ignored = 0
GROUP BY se.name,s.sub_name
ORDER BY se.name,s.sub_name

我想用它做一些事情:

1) 'index' 的计算结束,我将它全部乘以 sp.position,然后得到它的 SUM。如果在第一个 LEFT JOIN 'position' 中没有匹配,我想给 sp.position 一个 200 的值。所以基本上如果在 'phrase' 表中我有一个 ID=2,但在整个 'position' 表中的 sp.phrase_id 中不存在,然后 sp.position=200 用于 'index' 计算,否则它将是存储在 'position' 表中的任何值。我希望这是有道理的。

2) 我做了一个 GROUP BY se.name。我想对类似 se.name 字段的整个 'index' 值进行实际求和。因此,在现在的结果集中,如果有 20 个具有相同 se.name 的 p.text 行,我想对相同 se.name 的索引列求和。

我更像是一个 PHP 专家,但正在尝试学习更多 MySQL。我坚信让数据库尽可能多地完成工作,而不是在返回数据集后尝试对其进行操作。

我希望问题很清楚。无论如何,1)和2)都可以完成吗?我还想修改此查询以执行更多操作,但我认为如果我将来需要更多帮助,那将需要一个不同的问题。

位置表有一个 engines_id、phrase_id、item_id,这将使它成为一个唯一的条目。我要计算的值是 sp.position 值。但是有些情况下没有这些 ID 组合的条目。如果我刚刚列出的 3 个 ID 的组合没有条目,我想在我的计算中使用 sp.position=200。

最佳答案

怎么样:

select x.name, sum(index) from
(
SELECT p.text,se.name,s.sub_name,SUM((p.volume / (SELECT SUM(p.volume)
FROM phrase p
WHERE p.volume IS NOT NULL) * if(sp.position is null,200,sp.position)))
AS `index`
FROM phrase p
LEFT JOIN `position` sp ON sp.phrase_id = p.id
LEFT JOIN `engines` se ON se.id = sp.engine_id
LEFT JOIN item s ON s.id = sp.site_id
WHERE p.volume IS NOT NULL
AND s.ignored = 0
GROUP BY se.name,s.sub_name
ORDER BY se.name,s.sub_name
)x
GROUP BY x.name

关于mysql - 连接表 : case statement for no matches?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3145993/

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