Question

I have a fairly boggling problem. What I'm after is a list of all the industries whether they have been linked to a job or not. So..

Web Design [0]
Accounts[3]
Sales[1]
Marketing[0]

So that the jobs in the database have a industry id that's saved with the job. the industry table has a list of industry types. Web Design, Accounts, Sales, Marketing etc Below is my SQL so far

SELECT ind.name,ind.id, GROUP_CONCAT(job.industry_id) AS id,
COUNT(*) AS industry_count
FROM jobs AS job,
industries AS ind
WHERE ind.id = job.industry_id
GROUP BY industry_id

This returns the count of each job that belongs to an industry but i want all industries to be returned with or without jobs linked to them. Thank you all so much for helping. Rob

Was it helpful?

Solution

It seems you need a LEFT JOIN. Try this out:

SELECT ind.name, ind.id,
  COALESCE(GROUP_CONCAT(job.industry_id), 'default_value') AS id,
  COUNT(job.industry_id) AS industry_count
FROM industries ind
LEFT JOIN jobs job ON ind.id = job.industry_id
GROUP BY ind.id

Note if there is no job for a given industry you'll get null in the GROUP_CONCAT. You can add a default value for those cases that way.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top