gpt4 book ai didi

MySQL不确定聚合函数

转载 作者:行者123 更新时间:2023-11-29 21:38:12 25 4
gpt4 key购买 nike

我有这个函数多对多表。

table Actor
-----------
Actorid Fullname

table entertainment
-------------------------
Entertainmentid Name Date


Actor_entertainment
-------------------------
Entertainmentid Actorid

我需要选择所有 Actor 的姓名,并为每个 Actor 选择最早的娱乐日期和 Actor 的姓名。

我构建了这个查询:

SELECT 
a.fullname
, c.Name
, MIN(c.Date)
FROM Actor a
INNER JOIN Actor_entertainment b on b.Actorid = a.Actorid
INNER JOIN entertainment c ON c.entertainmentID = b.entertainmentID
GROUP BY
a.Fullname

查询效果很好,但我不确定 MIN 函数选择了正确的日期。您能否阅读此查询并告诉我我是否在某个地方错了?准确来说有可能出错吗?

谢谢。

最佳答案

是的,将返回c.Date的最小值。只要 Date 列的数据类型为 DATEDATETIMETIMESTAMP,这将是“最早的日期” >,或者该列中存储的值采用规范格式...较低的值对应于较早的日期。

但是,c.Name 表达式返回的值是不确定。也就是说,不能保证该表达式返回的值将来自返回最小日期值的同一行。

(其他数据库会对该 SQL 语句返回错误,拒绝出现在 SELECT 列表中而不出现在 GROUP BY 子句中的“非聚合”表达式。MySQL 提供了非标准扩展GROUP BY 允许执行此查询。可以通过将 SQL_MODE 设置为包含 ONLY_FULL_GROUP_BY 来修改 MySQL 的行为以禁用此扩展。)

有几种方法可以获取与最早日期关联的名称

对于返回的少量行和可用的合适索引,使用相关子查询是可行的:

  SELECT a.fullname
, ( SELECT c.Name
FROM entertainment c
JOIN Actor_entertainment b
ON b.entertainmentID = c.entertainmentID
WHERE b.Actorid = a.Actorid
ORDER BY c.Date ASC, c.Name ASC
LIMIT 1
) AS `Name`
, ( SELECT c.Date
FROM entertainment c
JOIN Actor_entertainment b
ON b.entertainmentID = c.entertainmentID
WHERE b.Actorid = a.Actorid
ORDER BY c.Date ASC, c.Name ASC
LIMIT 1
) AS `Date`
FROM Actor a
ORDER BY a.fullname

另一种方法是获取最早的日期,然后执行联接以查找与该最早的日期对应的行。如果 Actor 中的给定行有多于一行具有相同的“最小”日期,则这将返回所有这些行:

  SELECT da.fullname
, dc.Name
, dc.Date
FROM ( SELECT a.actorid
, MIN(c.Date) AS min_date
FROM Actor a
JOIN Actor_entertainment b
ON b.Actorid = a.Actorid
JOIN entertainment c
ON c.entertainmentID = b.entertainmentID
GROUP BY a.actorid
) d
JOIN Actor da
ON da.actorid = d.actorid
JOIN Actor_entertainment db
ON db.Actorid = d.Actorid
JOIN entertainment dc
ON dc.entertainmentID = db.entertainmentID
AND dc.Date = d.min_date

关于MySQL不确定聚合函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34746550/

25 4 0
文章推荐: android - Libgdx:屏幕管理器
文章推荐: javascript -