假设以下内容:
Table Parts
--------------------------------
ID Category Name Price
--------------------------------
1 A Processor 100
2 A MotherBoard 80
3 B Memory Card 40
4 B HD 70
5 C Cooler 10
Table Product_Views
-----------------------------------
Customer Date Part_ID
-----------------------------------
Bill mar-24-15 17:45 1
Wallace mar-25-15 08:17 4
Heather mar-25-15 08:43 1
Chuck mar-25-15 09:01 5
Cindy mar-25-15 11:23 1
如何构建SQL查询以检索显示的大多数查看过的部分:类别,价格和视图数量,按类别分组,没有价格列的总和?我必须做一个子查询,或者在一个简单的[INNER / LEFT / RIGHT] JOIN中做一个诀窍吗?
答案 0 :(得分:0)
select p.ID, p.Name, p.price, Count(v.*) "Number of Views"
from parts p
join product_views v
on p.id = v.part_id
group by p.ID, p.Name, p.price
order by Count(v.*) desc
这些方面应该有所作为。
编辑类别:
抱歉,我已经离开了一段时间。你想对这个类别做什么?如果您只是需要将其包含在分析中,您只需将其添加到select和group by语句中,如下所示:
select p.ID, p.Category, p.Name, p.price, Count(v.*) "Number of Views"
from parts p
join product_views v
on p.id = v.part_id
group by p.ID, p.Category, p.Name, p.price
order by Count(v.*) desc
但是,如果您想查看每个类别有多少观看次数,您需要平均价格或者保留价格。如果您考虑一下,在一个类别中,您有多个项目,每个项目的价格不同。所以你需要一些方法来统一这些价格,以便每个类别有一个单一的价格点。通常(并非总是),平均价格是一个类别的最具指示性的价格。查看类别级别信息的查询类似于以下内容:
select p.Category, AVG(p.price) "Average Price", Count(v.*) "Number of Views"
from parts p
join product_views v
on p.id = v.part_id
group by p.Category
order by Count(v.*) desc
为了免除价格,只需删除AVG(p.price)"平均价格"来自查询。
您可以将此最后一个查询与上一个查询进行比较,并查看所有差异都在select和group by语句中。 select将包含您想要查看的所有不同内容,group by语句将选择您希望在哪个级别查看这些内容。因此,如果您想要了解您的类别在整体上的表现,那么您要分组的最详细信息将只是类别列。如果您想了解每件商品的效果,那么您需要按每件商品的ID或名称进行分组。