SQL:您如何在列中显示占总数的百分比?

Posted

技术标签:

【中文标题】SQL:您如何在列中显示占总数的百分比?【英文标题】:SQL: How do you showcase the percentage of total in a column? 【发布时间】:2016-07-21 21:16:21 【问题描述】:

我必须创建一个电影数据库,其中一个查询涉及显示用户“评分”的电影列表以及实际评分和类型。

此外,它必须显示该类型在用户评分的所有电影中所占的百分比。例如:

CREATE TABLE GENRES (
MOVIEID                         INT             NOT NULL,
GENRE                           VARCHAR(20),
PRIMARY KEY(MOVIEID),
FOREIGN KEY(MOVIEID) REFERENCES MOVIES(ID)
);

查询:

SELECT U.USERID, M.TITLE, U.USERRATING, G.GENRE
FROM USER_RATEDMOVIES U, MOVIES M, GENRES G
WHERE (M.ID = U.MOVIEID) AND (U.USERID LIKE "EXAMPLE") AND (G.MOVIEID = M.ID)
ORDER BY DATE_YEAR, DATE_MONTH, DATE_DAY, DATE_HOUR, DATE_MINUTE, DATE_SECOND;

这将返回我需要的所有内容,除了总数的百分比。那就是我迷路的地方。我是 SQL 新手,并且在 COUNT(*) 和 GROUP BY 中挣扎。

【问题讨论】:

您使用的是SQL Server 还是mysql?你们都标记了。 对于初学者,您应该停止使用过时的 ANSI-89 样式连接并使用“较新”的 ANSI-92 样式连接。自该标准实施以来,已经过去了 20 多年。 sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/… 我不清楚你期望的输出是什么。 我目前正在使用 MySQL。而且我不知道这些类型的连接,我的代码基于我的讲师的材料。 @jpw 很伤心。这些年来,我见过很多人从学校毕业后就拥有在 sql server 中编写游标的能力,但不知道如何以基于集合的方法来编写游标。他们也很少教学生使用参数化查询,很多人离开学校时唯一的查询示例就是教科书注入模型。 太好了,游标。难怪这么多网站需要很长时间才能呈现输出。 【参考方案1】:

您的需求面临的挑战是呈现单元级数据和聚合级数据。因此,请考虑使用聚合 groupby 派生表(FROMJOIN 子句中的嵌套选择语句)与您之前设置的查询相关(匹配 USERID)(使用显式而不是隐式连接):

SELECT U.USERID, M.TITLE, U.USERRATING, G.GENRE, 
       (gdT.GENRE_COUNT / udT.RATING_COUNT) AS PERCENTAGE

FROM USER_RATEDMOVIES U 
INNER JOIN MOVIES M ON M.ID = U.MOVIEID
INNER JOIN GENRES G ON M.ID = G.MOVIEID 

INNER JOIN 
   -- COUNTS BY CORRESPONDING USER AND GENRE 
   (SELECT subU.USERID, subG.GENRE, Count(*) AS GENRE_COUNT 
    FROM USER_RATEDMOVIES subU 
    INNER JOIN MOVIES subM ON subM.ID = subU.MOVIEID
    INNER JOIN GENRES subG ON subM.ID = subG.MOVIEID 
    GROUP BY subU.USERID, subG.GENRE) AS gdT
ON gdT.USERID = U.USERID AND gdT.GENRE = G.GENRE

INNER JOIN
   -- COUNTS BY CORRESPONDING USER
   (SELECT subU.USERID, Count(*) AS RATING_COUNT 
    FROM USER_RATEDMOVIES subU 
    GROUP BY subU.USERID) AS udT
ON udT.USERID = U.USERID

WHERE  U.USERID LIKE "EXAMPLE"

ORDER BY DATE_YEAR, DATE_MONTH, DATE_DAY, 
         DATE_HOUR, DATE_MINUTE, DATE_SECOND;

【讨论】:

以上是关于SQL:您如何在列中显示占总数的百分比?的主要内容,如果未能解决你的问题,请参考以下文章

如何在列中显示饼图的图例?

如何获得合计占总数的百分比

BigQuery Legacy SQL(子查询?)中占总数的百分比

如何在代码中的sql表列中插入默认值

滚动百分位函数在列中输出 0?

如何使用 SQL LIKE 运算符在列中搜索精确模式?