【问题标题】:How do I make values not repeat in SQL GROUP BY when I add the date?添加日期时,如何使值在 SQL GROUP BY 中不重复?
【发布时间】:2021-10-13 10:32:59
【问题描述】:

我最近开始使用 SQL,我有点困惑。我想应用此查询,但添加一个日期列:

SELECT CONCAT(first_name, ' ', last_name) AS Full_name,
            SUM(p.amount) Pay_amount
FROM customer c
JOIN payment p ON c.customer_id = p.customer_id
GROUP BY 1
ORDER BY 2 DESC
LIMIT 10;

但是每当我添加日期列时,结果就会完全改变为具有不同日期的重复客户。

SELECT CONCAT(first_name, ' ', last_name) AS Full_name,
            SUM(p.amount) Pay_amount, 
            payment_date
FROM customer c
JOIN payment p ON c.customer_id = p.customer_id
GROUP BY 1, 3
ORDER BY 2 DESC
LIMIT 10;

编辑:这是我正在使用的示例数据库:https://www.postgresqltutorial.com/postgresql-sample-database/

【问题讨论】:

  • 当有多个约会时,你想要什么值?同时标记您正在使用的数据库。
  • 您的 GROUP BY 表示您需要每个 Full_name/payment_date 组合。如果您只需要一个 payment_date 作为 Full_name,您必须决定哪一个(例如第一个或最后一个)。
  • 您可能想查看 PostgreSql 函数,如 Grouping Sets。 postgresql.org/docs/10/…

标签: sql postgresql group-by subquery


【解决方案1】:

你可以使用聚合函数:

SELECT CONCAT(first_name, ' ', last_name) AS Full_name,
       SUM(p.amount) AS Pay_amount, 
       MAX(p.payment_date)
FROM customer c JOIN
     payment p
     ON c.customer_id = p.customer_id
GROUP BY 1
ORDER BY 2 DESC
LIMIT 10;

【讨论】:

    【解决方案2】:

    我找到了解决方案。感谢大家。我意识到我的问题很愚蠢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-11
      • 1970-01-01
      • 1970-01-01
      • 2010-11-12
      • 1970-01-01
      • 2017-08-22
      • 1970-01-01
      相关资源
      最近更新 更多