MySQL计数行
如何根据行的内容计算行数? 假设我有这样的桌子MySQL计数行,mysql,count,Mysql,Count,如何根据行的内容计算行数? 假设我有这样的桌子 [表a] ID_COMPANY | NAME ----------------------------- A1 | COMPANY A [表b] ID_COMPANY | USER | TYPE -------------------------------------- A1 | USER A | MANAGER A1 |
[表a]
ID_COMPANY | NAME
-----------------------------
A1 | COMPANY A
[表b]
ID_COMPANY | USER | TYPE
--------------------------------------
A1 | USER A | MANAGER
A1 | USER B | DEPT001
A1 | USER C | CUSTOMR
A1 | USER D | DEPT002
A1 | USER E | CUSTOMR
我怎样才能得到这样的结果?ID_COMPANY | NAME | TOTAL_MANAGER | TOTAL_STAFF_DEPT | TOTAL_CUST
----------------------------------------------------------------------------
A1 | COMPANY A | 1 | 2 | 1
thx guys使用子查询并计算结果 在有缺陷的“psuedo sql”中: 当我说有缺陷时,我的意思是我没有尝试过这个,我只是想让大家明白我的想法,而不是给你一些东西来复制粘贴
SELECT
`table_a`.`ID_COMPANY`,
`NAME`,
SUM(IF(`TYPE` = 'MANAGER', 1, 0)) AS `TOTAL_MANAGER`,
SUM(IF(`TYPE` LIKE 'DEPT%', 1, 0)) AS `TOTAL_STAFF_DEPT`,
SUM(IF(`TYPE` = 'CUSTOMR', 1, 0)) AS `TOTAL_CUST`
FROM `table_a`
JOIN `table_b`
USING (`ID_COMPANY`)
GROUP BY `table_a`.`ID_COMPANY`
SUM
s的标准可能需要调整,因为我不太明白你想要达到什么目的。根据Matthew的回答,我建议你使用联合和分组。例如:
SELECT ID_COMPANY, NAME, COUNT(USER) AS TOTAL_MANAGER FROM TABLE_B WHERE TYPE LIKE 'MANAGER' GROUP BY ID_COMPANY
您需要合并这些结果以获得一个结果集。类似于:
SELECT
ID_COMPANY,
NAME,
(SELECT COUNT(ID_COMPANY) FROM table_b WHERE ID_COMPANY = table_a.ID_Company and TYPE = 'MANAGER') as TOTAL_MANAGER,
(SELECT COUNT(ID_COMPANY) FROM table_b WHERE ID_COMPANY = table_a.ID_Company and TYPE = 'DEPT001') as DEPT001C,
(SELECT COUNT(ID_COMPANY) FROM table_b WHERE ID_COMPANY = table_a.ID_Company and TYPE = 'DEPT002') as DEPT002C,
FROM table_a
GROUP BY ID_COMPANY
。。。这里有一个
JOIN
方法:
SELECT
a.id_company,
a.name,
mgr.cnt AS total_manager,
dept.cnt AS total_staff_dept,
cust.cnt AS total_cust
FROM
a
JOIN
(SELECT id_company, COUNT(*) AS cnt
FROM b WHERE type = 'MANAGER' GROUP BY id_company) mgr
ON a.id_company = mgr.id_company
JOIN
(SELECT id_company, COUNT(*) AS cnt
FROM b WHERE type LIKE 'DEPT%' GROUP BY id_company) dept
ON a.id_company = dept.id_company
JOIN
(SELECT id_company, COUNT(*) AS cnt
FROM b WHERE type = 'CUSTOMR' GROUP BY id_company) cust;
。。。这给了我(假设没有比你显示的更多的记录):
您可能需要在select子句.tq中使用
表a.ID\u COMPANY
!它解决了。。事实上,我想得到多少用户帐户为每个注册公司在我的网站。thx=)如果我的答案解决了您的问题,您应该单击答案旁边的复选框将其标记为“已接受”答案。
SELECT
a.id_company,
a.name,
mgr.cnt AS total_manager,
dept.cnt AS total_staff_dept,
cust.cnt AS total_cust
FROM
a
JOIN
(SELECT id_company, COUNT(*) AS cnt
FROM b WHERE type = 'MANAGER' GROUP BY id_company) mgr
ON a.id_company = mgr.id_company
JOIN
(SELECT id_company, COUNT(*) AS cnt
FROM b WHERE type LIKE 'DEPT%' GROUP BY id_company) dept
ON a.id_company = dept.id_company
JOIN
(SELECT id_company, COUNT(*) AS cnt
FROM b WHERE type = 'CUSTOMR' GROUP BY id_company) cust;
+------------+------+---------------+------------------+------------+
| id_company | name | total_manager | total_staff_dept | total_cust |
+------------+------+---------------+------------------+------------+
| A1 | foo | 1 | 2 | 2 |
+------------+------+---------------+------------------+------------+
1 row in set (0.00 sec)