SQL返回最受欢迎/不受欢迎的类别的名称

时间:2013-08-12 15:09:18

标签: mysql sql

我已经尝试了很长一段时间,但我无法得到任何我尝试工作的陈述。以下是表的简化版本以及我想要实现的目标:

apps表

app_id      app_category
--------------------------
1           2
2           4
3           2
4           1

类别表

category_id  category_name
-------------------------------
1            Arcade and Action
2            Brain and Puzzle        
3            Casual
4            Casino

我希望我的陈述能够返回最受欢迎类别的名称,并且如果可能的话,还要返回另一个类别以返回最不受欢迎的类别。

例如,最受欢迎的类别是Brain和Puzzle,因为在其类别字段中有两个id = 2的应用。

我已经尝试过各种各样的选择,并会感激任何人的意见。 感谢

5 个答案:

答案 0 :(得分:6)

这样的事情应该可以解决问题...

select category_name, count(apps.app_category)
from categories
left join apps on apps.app_category = categories.category_id
group by category_name
order by count(apps.app_category)

请参阅http://sqlfiddle.com/#!2/b0b75/5

答案 1 :(得分:2)

最受欢迎的类别:

select * 
from categories 
where category_id = (select category_id from apps group by category_id order by count(*) desc limit 1)

最不受欢迎的类别:

select * 
from categories 
where category_id = (select category_id from apps group by category_id order by count(*) limit 1)

答案 2 :(得分:2)

最受欢迎

select top 1 category_name, count(*)
from categories
inner apps on apps.app_category = categories.category_id
group by category_id
order by count(*) desc

最不受欢迎

select top 1 category_name, count(*)
from categories
inner apps on apps.app_category = categories.category_id
group by category_id
order by count(*)

答案 3 :(得分:1)

SELECT COUNT(a.app_category) as AppCount, c.category_name
FROM apps a
INNER JOIN categories c on a.app_category = c.category_id
GROUP BY c.category_id    
ORDER BY COUNT(a.app_category)

这样的事情可以让你计算出你可以选择最不受欢迎的事件的次数。

答案 4 :(得分:1)

select category_name, count(app_id) 
from apps right join categories on (app_category = category_id) 
group by category_name 
order by count(app_id) desc

第一个结果将是最受欢迎的,最后一个最不受欢迎的 - 这也会显示0个应用的类别。

如果您只想要1个结果,则可以添加LIMIT 1并更改订单(asc为最不受欢迎的,desc为最受欢迎的。)

http://sqlfiddle.com/#!2/465c81/5