【发布时间】:2011-01-03 15:28:24
【问题描述】:
我有这 3 个问题:
SELECT
title, year, MovieGenres(m.mid) genres,
MovieDirectors(m.mid) directors, MovieWriters(m.mid) writers,
synopsis, poster_url
FROM movies m
WHERE m.mid = 1;
SELECT AVG(rating) FROM movie_ratings WHERE mid = 1;
SELECT COUNT(rating) FROM movie_ratings WHERE mid = 1;
我需要将它们加入到一个查询中。我能够这样做:
SELECT
title, year, MovieGenres(m.mid) genres,
MovieDirectors(m.mid) directors, MovieWriters(m.mid) writers,
synopsis, poster_url, AVG(rating) average, COUNT(rating) count
FROM movies m INNER JOIN movie_ratings mr
ON m.mid = mr.mid
WHERE m.mid = 1
GROUP BY
title, year, MovieGenres(m.mid), MovieDirectors(m.mid),
MovieWriters(m.mid), synopsis, poster_url;
但我不太喜欢那种“巨大”的 GROUP BY,有没有更简单的方法?
【问题讨论】:
-
按照个人喜好编写“整洁”代码是愚蠢的。当你说,“我真的不喜欢那个‘巨大的’群体。”你听起来很不专业。我不是说这话是刻薄的。首先,从任何标准来看,它都不是很大。这是一个非常普通的小组。其次,它就是这样。您应该编写执行以下操作的查询; 1. 规模。数据库活动必须很好地扩展。 2. 可维护。您的查询应符合语法和格式标准。
-
我强烈建议您消除 UDF。尽管它们可能会使 SQL 看起来更干净,但它们会破坏您的可伸缩性和性能。 Tom Kyte 的规则 1 是在 SQL 中做所有可以做的事情……当你不能在 SQL 中做时,在 PL/SQL 中做。如果director 和writer 只是其他关系表,则将它们全部连接起来。如果它们是 SOA 调用或类似的东西......然后离开它们。
-
我的意思是这对我来说没有意义,必须有更好的方法。我的意思是,如果我必须选择一堆字段但不是全部(我可以使用 *),我必须将它们全部放在 GROUP BY 中,因为我只知道基础知识,这对我来说没有意义Oracle SQL,也许有更好的方法来做我所追求的,也许没有。这就是 SO 的用途,对吧?