gpt4 book ai didi

mysql - 使用 "group by"带条件和 "group by"计算的计数记录总和

转载 作者:行者123 更新时间:2023-11-29 17:54:08 26 4
gpt4 key购买 nike

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

我的数据库中有2个表,并且想要使用“group by”对存在于second_table列中的外键id(存储像数组“1,2,3,4,5”这样的id)上的first_table记录进行计数”)。

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

现在我编写了以下查询,但它无法正常工作并显示错误的数字。

我想要:

1-按“fk_id”对first_table组中的记录进行计数

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,' ','')

关于mysql - 使用 "group by"带条件和 "group by"计算的计数记录总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49012285/

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