I want to query for all products with the name “Shania Twain”, but I want group them only by the tree with the deepest nlevel.
Assuming I have a table like the following with the name categories
+---------------+---------------+---------------+ |id |name |tree | +---------------+---------------+---------------+ |1 |"Music" |100 | +---------------+---------------+---------------+ |2 |"Shania Twain" |100.1 | +---------------+---------------+---------------+ |3 |"Artists" |200 | +---------------+---------------+---------------+ |5 |"Country" |200.2 | +---------------+---------------+---------------+ |6 |"Shania Twain" |200.2.4 | +---------------+---------------+---------------+
So, for example,
SELECT MAX(cat.id), cat.name, MAX(cat.tree) FROM public.categories cat WHERE cat.name = "Shania Twain" GROUP BY name HAVING MAX(nlevel(cat.tree))
The problem lies with the HAVING
clause requiring a boolean expression. The clause MAX(nlevel(cat.tree))
will return an integer.
How do I go about doing this?
Thanks in advance
Mahmoud
Advertisement
Answer
SELECT cat.id cat.name, cat.tree FROM public.categories AS cat WHERE cat.name = 'Shania Twain' AND NLEVEL(cat.tree) = (SELECT MAX(NLEVEL(tree) FROM public.categories WHERE cat.name='Shania Twain'))