Sql server SQL查询以获取SQL Server中所有类别相册的相册计数
我想显示Sql server SQL查询以获取SQL Server中所有类别相册的相册计数,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我想显示AlbumCategories,每个类别的AlbumCategories计数如下所示 预期结果: Sports(2) Education(3) Community(0) Something(0) 查询: SELECT AC.ACID, MAX(AC.Name) as Name, COUNT(*) as Frequency FROM Album A INNER JOIN AlbumCategories AC ON A.ACID = AC.ACID
AlbumCategories
,每个类别的AlbumCategories
计数如下所示
预期结果:
Sports(2)
Education(3)
Community(0)
Something(0)
查询:
SELECT
AC.ACID, MAX(AC.Name) as Name,
COUNT(*) as Frequency
FROM
Album A
INNER JOIN
AlbumCategories AC ON A.ACID = AC.ACID
GROUP BY
AC.ACID
此查询仅返回具有上述查询的唱片样本输出的唱片类别
Sports(2)
Education(3)
表专辑类别:
ACID Name
1 Sports
2 Education
3 Community
4 Something
AID ACID Name
1 1 Footbal season 2015
2 1 Footbal season 2016
3 2 Album one
4 2 Album Two
5 2 Album Three
PID AID Image
表相册:
ACID Name
1 Sports
2 Education
3 Community
4 Something
AID ACID Name
1 1 Footbal season 2015
2 1 Footbal season 2016
3 2 Album one
4 2 Album Two
5 2 Album Three
PID AID Image
表相册照片:
ACID Name
1 Sports
2 Education
3 Community
4 Something
AID ACID Name
1 1 Footbal season 2015
2 1 Footbal season 2016
3 2 Album one
4 2 Album Two
5 2 Album Three
PID AID Image
您需要使用
右连接
<代码>内部联接仅提取联接表之间的匹配记录。从相册
表格中计算列数不要使用*
架构设置
CREATE TABLE AlbumCategories
([ACID] int, [Name] varchar(9))
;
INSERT INTO AlbumCategories
([ACID], [Name])
VALUES
(1, 'Sports'),
(2, 'Education'),
(3, 'Community'),
(4, 'Something');
CREATE TABLE albums
([AID] int, [ACID] int, [Name] varchar(19))
;
INSERT INTO albums
([AID], [ACID], [Name])
VALUES
(1, 1, 'Footbal season 2015'),
(2, 1, 'Footbal season 2016'),
(3, 2, 'Album one'),
(4, 2, 'Album Two'),
(5, 2, 'Album Three');
SELECT AC.ACID,
AC.NAME AS NAME,
Count(A.ACID) AS Frequency
FROM albums A
RIGHT JOIN AlbumCategories AC
ON A.ACID = AC.ACID
GROUP BY AC.ACID,
AC.NAME
查询
CREATE TABLE AlbumCategories
([ACID] int, [Name] varchar(9))
;
INSERT INTO AlbumCategories
([ACID], [Name])
VALUES
(1, 'Sports'),
(2, 'Education'),
(3, 'Community'),
(4, 'Something');
CREATE TABLE albums
([AID] int, [ACID] int, [Name] varchar(19))
;
INSERT INTO albums
([AID], [ACID], [Name])
VALUES
(1, 1, 'Footbal season 2015'),
(2, 1, 'Footbal season 2016'),
(3, 2, 'Album one'),
(4, 2, 'Album Two'),
(5, 2, 'Album Three');
SELECT AC.ACID,
AC.NAME AS NAME,
Count(A.ACID) AS Frequency
FROM albums A
RIGHT JOIN AlbumCategories AC
ON A.ACID = AC.ACID
GROUP BY AC.ACID,
AC.NAME
结果:
╔══════╦═══════════╦═══════════╗
║ ACID ║ NAME ║ Frequency ║
╠══════╬═══════════╬═══════════╣
║ 1 ║ Sports ║ 2 ║
║ 2 ║ Education ║ 3 ║
║ 3 ║ Community ║ 0 ║
║ 4 ║ Something ║ 0 ║
╚══════╩═══════════╩═══════════╝
您需要使用
右连接
<代码>内部联接仅提取联接表之间的匹配记录。从相册
表格中计算列数不要使用*
架构设置
CREATE TABLE AlbumCategories
([ACID] int, [Name] varchar(9))
;
INSERT INTO AlbumCategories
([ACID], [Name])
VALUES
(1, 'Sports'),
(2, 'Education'),
(3, 'Community'),
(4, 'Something');
CREATE TABLE albums
([AID] int, [ACID] int, [Name] varchar(19))
;
INSERT INTO albums
([AID], [ACID], [Name])
VALUES
(1, 1, 'Footbal season 2015'),
(2, 1, 'Footbal season 2016'),
(3, 2, 'Album one'),
(4, 2, 'Album Two'),
(5, 2, 'Album Three');
SELECT AC.ACID,
AC.NAME AS NAME,
Count(A.ACID) AS Frequency
FROM albums A
RIGHT JOIN AlbumCategories AC
ON A.ACID = AC.ACID
GROUP BY AC.ACID,
AC.NAME
查询
CREATE TABLE AlbumCategories
([ACID] int, [Name] varchar(9))
;
INSERT INTO AlbumCategories
([ACID], [Name])
VALUES
(1, 'Sports'),
(2, 'Education'),
(3, 'Community'),
(4, 'Something');
CREATE TABLE albums
([AID] int, [ACID] int, [Name] varchar(19))
;
INSERT INTO albums
([AID], [ACID], [Name])
VALUES
(1, 1, 'Footbal season 2015'),
(2, 1, 'Footbal season 2016'),
(3, 2, 'Album one'),
(4, 2, 'Album Two'),
(5, 2, 'Album Three');
SELECT AC.ACID,
AC.NAME AS NAME,
Count(A.ACID) AS Frequency
FROM albums A
RIGHT JOIN AlbumCategories AC
ON A.ACID = AC.ACID
GROUP BY AC.ACID,
AC.NAME
结果:
╔══════╦═══════════╦═══════════╗
║ ACID ║ NAME ║ Frequency ║
╠══════╬═══════════╬═══════════╣
║ 1 ║ Sports ║ 2 ║
║ 2 ║ Education ║ 3 ║
║ 3 ║ Community ║ 0 ║
║ 4 ║ Something ║ 0 ║
╚══════╩═══════════╩═══════════╝
使用
LEFT JOIN
代替。使用LEFT JOIN
代替。我的意思是使用RIGHT JOIN获取所有记录,每个记录的频率为1。COUNT(*)
可能会给你1
,但这不是这个答案建议你使用的。仔细阅读答案。@Learning-这可能是因为您仍在使用*
count aggregate。谢谢你。它可以工作,您可以指出我所犯的一些错误。我的意思是使用RIGHT JOIN get me所有记录,每个记录的频率为1。COUNT(*)
可能会为您提供1
,但这不是此答案建议您使用的方法。仔细阅读答案。@Learning-这可能是因为您仍在使用*
count aggregate。谢谢你。它起作用了,你指出了我犯的几个错误。