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

标签 mysql

我有这个问题:

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/

相关文章:

mysql - 合并两个mysql查询的问题

php - 如何从 mysql 中提取登录用户 ID

mysql - 插入时顺序重要吗?

mysql - 无法在Linux中安装mysqlclient

mysql - 选择查找并替换查询 Mysql

javascript - 如何正确地允许 Node js 有机会在我的无限 while 循环中运行其异步事件

mysql - 分组依据来自同一个表

仅当 count() as col1 <> col2 时,mySQL 选择行

php - 将数据库中的图像显示为表格中的单元格

mysql - 如何从 linux 文件中删除特定符号?