SQL:如何获取表的每个最大值?

标签 sql join sum max

我有一个名为“Sales”的巨大表格,其中包含这些区域

Time  | Product  | amount | customerid
Date1 | Product1 | 2      | 2
Date1 | Product2 | 5      | 3
Date1 | Product1 | 6      | 3
Date1 | Product4 | 1      | 3
Date2 | Product1 | 2      | 1
Date2 | Product1 | 2      | 4
Date2 | Product3 | 3      | 4
Date2 | Product3 | 3      | 1

现在,我想每天获得一款最受欢迎的产品。

SELECT  Time, 
        Product, 
        SUM(amount) AS Total 
FROM Sales 
     GROUP BY Time, Product

给我以下信息

Time  | Product  | total
Date1 | Product1 | 8
Date1 | Product2 | 5
Date1 | Product4 | 1
Date2 | Product1 | 4
Date2 | Product4 | 6

我必须以何种方式更改我的查询,以仅获取每天最畅销的产品?

编辑:非常感谢您提供的解决方案,但它不起作用。 我想总结一下,每天哪个产品最畅销
Time | Product | total<br/> Date1 | Product1 | 8<br/> Date2 | Product4 | 6
像“LIMIT 1”这样的东西只显示第一行,但不是全部!

最佳答案

试试这个查询。 Rank函数的实现在不同的数据库中是不同的。

SELECT TIME, PRODUCT
FROM (
SELECT TIME, PRODUCT, RANK() OVER(ORDER BY SUM_AMOUNT) AS SELECT_TOP
FROM 
(
(
      SELECT 
      TIME
     , PRODUCT
     , SUM(AMOUNT) AS SUM_AMOUNT
     FROM Sales 
GROUP BY TIME, PRODUCT ) TBL1 ) TBL2
WHERE
SELECT_TOP = 1

关于SQL:如何获取表的每个最大值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20091575/

相关文章:

mysql - mysql查询中组计数的累计和

mysql - 如何对多行使用 SUM()

php - 从表中选择所有值=来自另一个表的多个值

sql - 编译和刷新物化 View 有什么区别?

sql - 如何避免在多个表上的 SQL 上使用笛卡尔积

mysql - SQL 查询从以下情况的两个表中检索数据

sql - 在 postgresql 上使用 IF 语句选择

mysql - 准备好的语句 : Duplicate Key Update with Where

sql - 动态访问grails中groovy类中的DataSource

mysql - 从连接或子查询中选择记录作为列(子数组)