使用条件和“分组依据”使用“分组依据”计算的计数记录总和
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用条件和“分组依据”使用“分组依据”计算的计数记录总和相关的知识,希望对你有一定的参考价值。
对于这个问题的模糊标题我很抱歉。
我的数据库中有2个表,并且想要在second_table列中存储的外键id上使用“group by”计数first_table的记录(存储类似于数组“1,2,3,4,5”的ID)。
id |名字| fk_id
1 | john | 1
2 | mike | 1
3 | jane | 2
4 | tailor | 1
5 | jane | 3
6 | tailor | 5
7 | jane | 4
8 | tailor | 5
9 | jane | 5
10 | tailor | 5
id |名字| fk_ids | s_fk_id
1 | xxx | 1,5,6 | 1
2 | yyy | 2,3 | 1
3 | zzz | 9 | 1
4 | www | 7,8 | 1
现在我编写了以下查询,但它无法正常工作并显示错误的数字。
我想要:
first_table组中的1-Count记录“fk_id”
2 - 对“fk_ids”中存在的计数记录求和
3 - 显示按ID分组的总和结果(相关计数的总和)。
符号''表示``。
select sum(if(FIND_IN_SET('fk_id', 'fk_ids')>0,'count',0) 'sum', 'count', 'from'.'fk_id', 'second_table'.* FROM 'second_table'
LEFT JOIN
(
SELECT 'fk_id', count(*) 'count'
FROM 'first_table'
group BY 'fk_id'
) AS 'from'
ON FIND_IN_SET('fk_id', 'fk_ids')>0
WHERE 'second_table'.'s_fk_id'=1
GROUP BY 'id'
ORDER by 'count' DESC
该表有很多数据,我们没有计划改变结构。
编辑:
期望的输出:
id |名字|和
1 | xxx | 7 (3+4+0)
2 | yyy | 2 (1+1)
3 | zzz | 0 (0)
4 | www | 0 (0+0)
答案
两个假期后,我回来工作,发现“FIND_IN_SET”函数无法正常使用包含空格的字符串。
问题是我也忽略了这个空间,(和这个问题一样)
最后这个查询工作:
select sum(`count`) `sum`, `count`, `from`.`fk_id`, `second_table`.* FROM `second_table`
LEFT JOIN
(
SELECT `fk_id`, count(*) `count`
FROM `first_table`
group BY `fk_id`
) AS `from`
ON FIND_IN_SET(`fk_id`, replace(`fk_ids`,' ',''))>0
WHERE `second_table`.`s_fk_id`=1
GROUP BY `id`
ORDER by `count` DESC
而魔术是replace(fk_ids,' ','')
以上是关于使用条件和“分组依据”使用“分组依据”计算的计数记录总和的主要内容,如果未能解决你的问题,请参考以下文章