【问题标题】:SQL - Select rows based on column value andSQL - 根据列值选择行和
【发布时间】:2018-07-25 23:50:01
【问题描述】:

我有一张这样的桌子:

CustomerID - ProductID - Score

Customer1  -  Product1 -- 9
Customer1  -  Product2 -- 10
Customer2  -  Product3 -- 11
Customer2  -  Product4 -- 7
Customer3  -  Product1 -- 6

我想按客户 ID 对其进行分组。并只为得分最高的客户选择那一行 所以,我的桌子应该变成:

Customer1  -  Product2 -- 10
Customer2  -  Product3 -- 11
Customer3  -  Product1 -- 6

如何在 SQL 中执行此操作?

【问题讨论】:

  • 在 GROUP BY 和 HAVING MAX 上进行一些谷歌搜索。你会比别人给你一个解决方案更好地弄清楚它。祝你好运!

标签: sql group-by max rank


【解决方案1】:

尝试SQL rank 函数对子组中的行进行排序并选择第一行,如下所示。

Select * from 
(
    Select CustomerId, 
    productId, 
    Score,
    Rank() Over (PARTITION BY CustomerId ORDER BY Score DESC) AS Rnk
) query Where rnk = 1

【讨论】:

    【解决方案2】:

    试试这个: SELECT CUST_ID,PROD_ID, MAX(SCORE) AS SCORE FROM TABLE GROUP BY CUST_ID,PROD_ID;

    【讨论】:

      【解决方案3】:

      您需要对包含最大值的临时表进行“分组”,然后对临时表进行内部联接。

      https://www.w3schools.com/sql/sql_groupby.asp

      http://codingsight.com/introduction-to-temporary-tables-in-sql-server/

      您无法在单个 select 语句中执行您想要执行的操作,因为在第一个 select 语句完成运行之前,SQL Server 无法确定最大值是多少。这就是为什么您需要编写第二个查询并根据与临时表具有相同值的行进行连接

      【讨论】:

        猜你喜欢
        • 2023-02-03
        • 2018-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-12
        • 1970-01-01
        相关资源
        最近更新 更多