【发布时间】:2014-06-20 10:15:11
【问题描述】:
我有 3 个表格:帖子、图片和相册。 我需要计算每年发表的帖子、图片和相册的数量。 这里是表的创建:
create table Posts
(
PostID int primary key identity,
Description varchar(30) not null,
Date smalldatetime not null,
UserWriterID int references Users(UserID)
)
create table Albums
(
AlbumID int primary key identity,
Name varchar(20) not null,
Description varchar(30) not null,
Date smalldatetime not null,
AlbumOwnerID int references Users(UserID)
)
create table Pictures
(
PictureID int primary key identity,
AlbumID int references Albums(AlbumID),
Description varchar(30) not null,
Date smalldatetime not null,
)
表格中的一些数据样本:
图片:
PictureID | AlbumID | Desc | Date
1 | 1 | aa | 2000-01-01 00:00:00
2 | 1 | bb | 2011-08-31 15:24:00
10 | 2 | d | 2010-07-17 12:35:00
专辑:
AlbumID | Name | Desc | Date | AlbumOwnerID
1 | My album | my new album | 2000-01-01 00:00:00 | 2
2 | Belgium trip | trip in Belgium | 2005-07-08 00:00:00 | 2
9 | Work | Work and I | 2011-07-08 00:00:00 | 11
帖子:
PostID | Desc | Date | UserWriterID
1 | Feeling good | 2013-09-10 07:44:00 | 2
2 | FUN FUN FUN | 2015-12-21 09:45:00 | 8
3 | Whats up? | 2014-01-18 12:54:00 | 7
然后我插入数据。
现在,我编写了 3 个查询来获取每个表每年的计数。
create view PostPerYear as
select YEAR(Date) as Year , count(PostID) as Posts
from Posts
group by YEAR(Date)
go
create view AlbumsPerYear as
select YEAR(Date) as Year , count(AlbumID) as Albums
from Albums
group by YEAR(Date)
go
create view PicturesPerYear as
select YEAR(Date) as Year , count(PictureID) as Pictures
from Pictures
group by YEAR(Date)
go
但是,我需要一个能显示以上所有结果的查询TOGETHER。 例如:
年份 |帖子数 |专辑数量 |图片计数
2013 | 3 | 4 | 1
2005 | 13 |23 | 5
当我尝试时,我得到了笛卡尔积,例如:
select (p.Year) , (p.Posts) , (a.Albums) , (pic.Pictures)
from PostPerYear p ,AlbumsPerYear a ,PicturesPerYear pic
group by p.Year, p.Posts , a.Albums , pic.Pictures
结果是: 年份|帖子 |相册 |图片
2013 9 1 1
2013 9 1 2
2013 9 1 3
2013 9 1 4
2013 9 1 5
2013 9 1 6
2013 9 1 11
2013 9 2 1
2013 9 2 2
2013 9 2 6
2013 9 2 11
2014 10 1 1
2014 10 1 2
2014 10 1 3
2014 10 1 4
2014 10 1 5
2014 10 1 6
And Continued....
------------------------------
------------------------------
请问答案是什么?
谢谢!
【问题讨论】:
-
附带说明,如果您的表很大,您当前的查询将会因为忽略
date上的任何索引而变慢。如果你有类似日历表的东西,你应该可以把它变成一个范围查询。
标签: mysql sql sql-server count cartesian-product