使用条件和“分组依据”使用“分组依据”计算的计数记录总和

问题描述 投票:0回答:1

对于这个问题的模糊标题我很抱歉。

我的数据库中有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)  
mysql sql count sum left-join
1个回答
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,' ','')

© www.soinside.com 2019 - 2024. All rights reserved.