我有两个表,第一个表包含模块列表,第二个表包含模块映射表。
我需要从第一个“模块”表中获取所有记录以及第二个映射表中具有role_id = 25的模块映射ID的对应计数
我使用了以下代码
SELECT
`m`.`title`,
`m`.`id`,
CASE WHEN map.role_id =25 THEN 1 ELSE 0 END as counter
FROM `z6wpx_modules` as `m`
LEFT JOIN `z6wpx_users_module_map` as `map` ON `map`.`module_id` = `m`.`id`
GROUP by m.id
答案 0 :(得分:1)
您可以使用COUNT()
。例如:
SELECT
`m`.`title`,
`m`.`id`,
COUNT(*) as counter
FROM `z6wpx_modules` as `m`
LEFT JOIN `z6wpx_users_module_map` as `map` ON `map`.`module_id` = `m`.`id`
WHERE map.role_id = 25
GROUP BY m.id, m.title
或者您可以使用SUM()
函数来计算所有角色的人数
SELECT
`m`.`title`,
`m`.`id`,
SUM(CASE WHEN map.role_id = 25 THEN 1 ELSE 0 END) as counter
FROM `z6wpx_modules` as `m`
LEFT JOIN `z6wpx_users_module_map` as `map` ON `map`.`module_id` = `m`.`id`
GROUP BY m.id, m.title
答案 1 :(得分:0)
子查询会帮助
SELECT
`m`.`title`,
`m`.`id`,
(select COUNT(*) from `z6wpx_users_module_map` as `subMap` where
`subMap`.`module_id`=`m`.`id` ) as counter
FROM `z6wpx_modules` as `m`
LEFT JOIN `z6wpx_users_module_map` as `map` ON `map`.`module_id` = `m`.`id`
WHERE map.role_id = 25
GROUP BY m.id, m.title