gpt4 book ai didi

mysql - 不确定如何为上述任务构建 SQL 查询

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

这些是我的表格:

concerts (
concert_id: INT,
name: VARCHAR(200),
venue: VARCHAR(200),
schedule: DATETIME)

singers (
singer_id: INT,
name: VARCHAR(200),
gender: ENUM('male', 'female', 'other'))

performances(singer_id: INT,
concert_id: INT)
Foreign keys: {singer_id} to singers {concert_id} to concerts

我正在尝试提出一个查询列出2018年参加过5场以上演唱会的歌手的所有演唱会。(5 和 2018 是用户确定的变量/我现在正在测试这些变量) 我尝试了多次尝试,但似乎没有什么能接近我想要实现的任务。任何与此相关的帮助将不胜感激。

最佳答案

  • 在子选择查询 ( Derived table ) 中,我们可以首先确定 2018 年举办超过 5 场音乐会的所有 singer_id 值。我们使用 Group通过 Count(...) 函数,以确定 singer_id 的音乐会总数。 请注意,如果 singer_idconcert_id 组合在 performances 表中有重复的行,则您将需要使用 Count(Distinct ...) 函数。现在,我们可以使用 Having 子句仅考虑计数大于 5 的歌手。
  • 现在,只需将此派生表结果集加入到主表中,即可获取 2018 年的音乐会列表。

尝试以下查询:

SELECT c1.*, s1.*
FROM
concerts AS c1
JOIN performances AS p1 ON p1.concert_id = c1.concert_id
JOIN
(
SELECT
s.singer_id,
COUNT(c.concert_id) AS num_concerts
FROM
singers AS s
JOIN performances AS p ON p.singer_id = s.singer_id
JOIN concerts AS c ON c.concert.id = p.concert_id AND
c.schedule >= '2018-01-01' AND
c.schedule < '2019-01-01'
GROUP BY s.singer_id
HAVING num_concerts > 5
) AS dt ON dt.singer_id = p1.singer_id
JOIN singers AS s1 ON s1.id = dt.singer_id
WHERE c1.schedule >= '2018-01-01'
AND c1.schedule < '2019-01-01'

关于mysql - 不确定如何为上述任务构建 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53034380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com