Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SQL, COUNT doesn't work in my mysql query

Tags:

sql

mysql

count

I'm using mysql 5.1.

Here is my DB schema

office
+--------------+----------------+
| office_id    | office_name    |
+--------------+----------------+

employee
+--------------+-----------------------+------------+
| employee_id  | employee_hierarchy_id | office_id  |
+--------------+-----------------------+------------+

employee_hierarchy
+-----------------------+-------------------------------+
| employee_hierarchy_id | employee_hierarchy_description|
+-----------------------+-------------------------------+

I want to count the number of employees group by employee_hierarchy_id for each office_id

Here is my request to list factory_id and employee_hierarchy_id:

SELECT office_id, employee_hierarchy_id
FROM office, employee_hierarchy
ORDER BY office_id ASC 

And if I try to add count, it display only one line:

SELECT office_id, employee_hierarchy_id, COUNT(*)
FROM office, employee_hierarchy
ORDER BY office_id ASC
like image 222
Tom-pouce Avatar asked Sep 02 '26 15:09

Tom-pouce


2 Answers

add WHERE consition and GROUP BY clause

SELECT office_id, employee_hierarchy_id, COUNT(*)
FROM office, employee_hierarchy
WHERE office.factory_id = employee_hierarchy.factory_id
GROUP BY office_id, employee_hierarchy_id
ORDER BY office_id ASC

OR the recommended syntax

SELECT office_id, employee_hierarchy_id, COUNT(*)
FROM office INNER JOIN employee_hierarchy
        ON office.factory_id = employee_hierarchy.factory_id
GROUP BY office_id, employee_hierarchy_id
ORDER BY office_id ASC

UPDATE 1

if you want to still show records of office even without employee, use LEFT JOIN, otherwise INNER JOIN

SELECT  a.office_name , c.employee_hierarchy_description,
        COUNT(b.office_ID) totalCount
FROM    office a
        LEFT JOIN employee b
            ON a.office_ID = b.office_ID
        LEFT JOIN employee_hierarchy c
            ON b.employee_hierarchy_id = c.employee_hierarchy_id
GROUP BY a.office_name , c.employee_hierarchy_description
ORDER BY totalCount DESC
like image 175
John Woo Avatar answered Sep 05 '26 06:09

John Woo


I found another way of doing it, try this sub-query

SELECT SUM(number_of_employees) as 'number of employee per factory',factory_id
FROM (
SELECT COUNT(*) as 'number_of_employees',employee.factory_id
FROM factory,employee
WHERE factory.factory_id = employee.factory_id
GROUP BY employee.employee_hierarchy_id
) AS tmptbl 
GROUP BY tmptbl.factory_id

Hope this helps!

like image 27
Avinash Nair Avatar answered Sep 05 '26 06:09

Avinash Nair



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!