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。谢谢你。它起作用了,你指出了我犯的几个错误。