-1

我正在尝试在几次加入后创建一个组。这是我在下面尝试过的。

它给出了一个“未知错误”消息,没有太多上下文或信息来进行故障排除......我尝试了多种我在网上找到的解决方案,并引用了一些单独的示例,但没有任何运气。这对我来说似乎很基本,所以不确定问题是什么......我不是你所看到的 SQL 专家......

对于额外信息,slug 是每个表的唯一标识符。所以 account slug 是该帐户的 id,一个 season slug 是季节的 id 等等。每个表中没有重复的帐户或季节,因此在加入之前它们是唯一的。

主列是帐户,因为只能是其中一个,然后是一个帐户以来的季节可以有多个季节,然后一个季节以来的条目可以有多个条目。我的最终目标是计算每个帐户每季提交日期的所有条目。是一个带有示例数据的谷歌表。

我正在使用 ClicData 的内置 SQL 工具,因此这也可能是问题所在。

谢谢你的帮助!

SELECT production_data.accounts.created_at AS account_created,
         production_data.accounts.id AS account_id,
         production_data.accounts.slug AS account_slug,
         production_data.seasons.id AS season_id,
         production_data.seasons.slug AS season_slug,
         production_data.seasons.created_at AS season_created,
         production_data.seasons.deleted_at AS season_deleted,
         production_data.entries.user_id AS user_id,
         production_data.entries.id AS entry_id,
         production_data.entries.slug AS entry_slug,
         production_data.entries.created_at AS entry_created,
         production_data.entries.deleted_at AS entry_deleted,
         production_data.entries.submitted_at AS entry_submitted,
         Count(production_data.entries.submitted_at)
FROM production_data.accounts
JOIN production_data.seasons
    ON production_data.accounts.id = production_data.seasons.account_id
JOIN production_data.entries
    ON production_data.seasons.id = production_data.entries.season_id
GROUP BY production_data.accounts.slug, production_data.seasons.slug
4

3 回答 3

1

您想计算每个帐户季节的条目。所以你可以显示账户的数据和季节的数据,但不能显示条目数据,因为没有条目。可以有多个条目,这就是我们计算它们的原因。

SELECT 
  a.created_at AS account_created,
  a.id AS account_id,
  a.slug AS account_slug,
  s.id AS season_id,
  s.slug AS season_slug,
  s.created_at AS season_created,
  s.deleted_at AS season_deleted,
  COUNT(e.id) AS entry_count
FROM production_data.accounts a
JOIN production_data.seasons s ON s.account_id = a.id
JOIN production_data.entries e ON e.season_id = s.id
GROUP BY a.slug, s.slug
ORDER BY a.slug, s.slug;

您按帐户 slug 和条目 slug 分组。您说这些列在其表中是唯一的,因此它们可能存在唯一约束。然后,您可以选择帐户数据和季节数据,因为您的GROUP BY子句确保每个帐户和每个季节都有一个结果行。

但是,一些 DBMS 要求您也按其他列分组,即按等,因为它们不太管理,每个结果行a.created_at只能有一个等:a.created_at

GROUP BY a.slug, s.slug, a.created_at, a.id, s.id, s.created_at, s.deleted_at

无论如何,我更喜欢的是在加入之前进行汇总。在这里,您希望帐户季节与他们的条目数相结合。

SELECT 
  a.created_at AS account_created,
  a.id AS account_id,
  a.slug AS account_slug,
  s.id AS season_id,
  s.slug AS season_slug,
  s.created_at AS season_created,
  s.deleted_at AS season_deleted,
  e.entry_count
FROM production_data.accounts a
JOIN production_data.seasons s ON s.account_id = a.id
JOIN
(
  SELECT season_id, COUNT(*) AS entry_count
  FROM production_data.entries
  GROUP BY season_id
) e ON e.season_id = s.id
ORDER BY a.slug, s.slug;

还有一件事:上面的查询不显示零条目的帐户季节。要获得这些帐户季节,也可以将条目连接更改为LEFT OUTER JOIN(或LEFT JOIN简称)。

于 2021-03-10T19:54:29.607 回答
0

对结果进行分组时,应包括除聚合列之外的所有列。这是更新的查询。这在语法上是正确的,但我不确定这是否符合您的目的。

SELECT production_data.accounts.created_at AS account_created,
         production_data.accounts.id AS account_id,
         production_data.accounts.slug AS account_slug,
         production_data.seasons.id AS season_id,
         production_data.seasons.slug AS season_slug,
         production_data.seasons.created_at AS season_created,
         production_data.seasons.deleted_at AS season_deleted,
         production_data.entries.user_id AS user_id,
         production_data.entries.id AS entry_id,
         production_data.entries.slug AS entry_slug,
         production_data.entries.created_at AS entry_created,
         production_data.entries.deleted_at AS entry_deleted,
         production_data.entries.submitted_at AS entry_submitted,
         Count(production_data.entries.submitted_at)
FROM production_data.accounts
JOIN production_data.seasons
    ON production_data.accounts.id = production_data.seasons.account_id
JOIN production_data.entries
    ON production_data.seasons.id = production_data.entries.season_id
GROUP BY production_data.accounts.created_at,
         production_data.accounts.id,
         production_data.accounts.slug,
         production_data.seasons.id,
         production_data.seasons.slug,
         production_data.seasons.created_at,
         production_data.seasons.deleted_at,
         production_data.entries.user_id,
         production_data.entries.id,
         production_data.entries.slug,
         production_data.entries.created_at,
         production_data.entries.deleted_at,
         production_data.entries.submitted_at
于 2021-03-10T06:50:25.037 回答
0

您必须在除 Group by 字段之外的所有字段上使用聚合函数。

Select  Count(*),
        TripTrn.ClientId,
        TripTrn.SoldTo
From tbl_Trip As Trip
Inner Join tbl_TripTransaction As TripTrn on TripTrn.TripId = Trip.TripRowId
Group BY TripTrn.ClientId, TripTrn.SoldTo
于 2021-03-10T06:55:59.750 回答