Reputation: 47
i have this query:
SELECT
(SELECT COUNT(*) FROM tb_pinturas WHERE c.catId= 4) AS desejo,
(SELECT COUNT(*) FROM tb_pinturas WHERE c.catId= 2) AS europa,
(SELECT COUNT(*) FROM tb_pinturas WHERE c.catId= 6) AS futebol,
(SELECT COUNT(*) FROM tb_pinturas WHERE c.catId= 8) AS jazz,
(SELECT COUNT(*) FROM tb_pinturas WHERE c.catId= 3) AS praia,
(SELECT COUNT(*) FROM tb_pinturas WHERE c.catId= 1) AS sp,
(SELECT COUNT(*) FROM tb_pinturas WHERE c.catId= 7) AS tamta,
(SELECT COUNT(*) FROM tb_pinturas WHERE c.catId= 5) AS velocidade,
c.catNome AS nome,
c.catSlug AS slug,
c.catId AS id
FROM aux_categoria c
LEFT JOIN tb_pinturas p ON(c.catId = p.catId)
GROUP BY c.catid ORDER BY c.catNome;
and i want to make just one column for each count. What should i do?
Upvotes: 0
Views: 68
Reputation: 65537
Something like this should work for you:
SELECT
c.catNome AS nome,
c.catId AS id,
count(p.catId) as the_count
FROM aux_categoria c
LEFT JOIN tb_pinturas p ON(c.catId = p.catId)
GROUP BY c.catNome,c.catid
ORDER BY c.catNome
Upvotes: 1
Reputation: 263703
You don't need each subquery. You can use SUM()
to count the values return by the boolean expression.
SELECT SUM(c.catId = 4) AS desejo,
SUM(c.catId = 2) AS europa,
SUM(c.catId = 6) AS futebol,
SUM(c.catId = 8) AS jazz,
SUM(c.catId = 3) AS praia,
SUM(c.catId = 1) AS sp,
SUM(c.catId = 7) AS tamta,
SUM(c.catId = 5) AS velocidade,
c.catNome AS nome,
c.catSlug AS slug,
c.catId AS id
FROM aux_categoria c
LEFT JOIN tb_pinturas p
ON c.catId = p.catId
GROUP BY c.catid,
c.catNome,
c.catSlu
ORDER BY c.catNome
Upvotes: 0