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

我希望我的语句返回最受欢迎的类别的名称,如果可能的话,还希望我的语句返回最不受欢迎的类别。

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

我已经尝试了各种各样的选择,并希望任何人的意见。谢谢

4

5 回答 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

于 2013-08-12T15:12:52.353 回答
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(*)
于 2013-08-12T15:18:25.613 回答
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)
于 2013-08-12T15:13:38.980 回答
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)

像这样的东西应该给你一个计数,你可以从中选择最受欢迎和最不受欢迎的事件。

于 2013-08-12T15:14:38.750 回答
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

于 2013-08-12T15:19:44.930 回答