我已经尝试了很长一段时间,但我无法得到任何我尝试工作的陈述。以下是表的简化版本以及我想要实现的目标:
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的应用。
我已经尝试过各种各样的选择,并会感激任何人的意见。 感谢
答案 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)
答案 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
为最受欢迎的。)