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

3

我已经尝试了相当长一段时间,但我无法使我尝试的任何语句起作用。这里是表的简化版本以及我想要实现的内容:

应用程序表

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

我希望我的语句返回最流行类别的名称,并且如果可能的话,还可以返回最不流行的类别。

例如,最流行的类别是“大脑和智力拼图”,因为在它们的类别字段中有两个id = 2的应用程序。

我尝试了相当多的选择,并感谢任何人的建议。谢谢。


请提供更具描述性的标题。 - Woot4Moo
你会说什么?我想不出其他的了。 - CptRayMar
你想要学习的概念是关于 SQL JOIN 的。找一个好的 JOIN 教程并从那里开始学习。 - Andy Lester
或许:返回最受欢迎的类别名称,以及另一个用于返回最不受欢迎的类别。 - Woot4Moo
5个回答

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
这将不会显示类别3作为最不受欢迎的类别,因为它在连接中被过滤掉了。 - Klaus Byskov Pedersen

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)

1
好的一点是:它不考虑根本没有使用的类别。 - Joel Coehoorn

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(*)

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)

类似这样的内容应该会给你一个出现次数的计数,从中你可以选择最流行和最不流行的。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接