【问题标题】:Select nvarchar values in GROUP BY clause?在 GROUP BY 子句中选择 nvarchar 值?
【发布时间】:2017-01-07 10:47:27
【问题描述】:

我有一个包含 3 列的表,如下所示:

CustomerId, CustomerName, ItemsCount

我想按CustomerId分组,ItemsCount值最高,但同时选择CustomerId的相反名称,知道CustomerId不是唯一的,CustomerName,我知道这是一个糟糕的设计,但这可能吗,我正在考虑使用 may beDISTINCTTOP 如果可能的话。

CustomerId   CustomerName   ItemsCount
-------------------------------------------
     1       Iwan               20
     2       Samir              30
     2       Samir              10

所以我想要这个结果:

CustomerId   CustomerName    ItemsCount
--------------------------------------------
     1       Iwan               20
     2       Samir              30

我停在了这里:

SELECT CustomerId, MAX(ItemsCount) 
FROM Custmers 
GROUP BY ItemsCount

【问题讨论】:

    标签: sql


    【解决方案1】:

    您可以按客户的 ID 和名称进行分组,并找到最大的项目数。

    select customerid, customername, max(itemscount) itemscount
    from customers
    group by customerid, customername
    

    【讨论】:

    • 听起来我离开 SQL 很久了!谢谢!
    • 但是需要吗?我相信按 customerid 或 customername 分组就足够了。
    • 最好让所有未分组的列出现在 group by 子句中。另外,look。 ANSI 兼容的数据库,例如 Oracle,甚至不允许它
    • @GurV:实际上 ANSI 标准允许从组中删除功能依赖于其他分组列的列。如果customerid 被定义为表的主键,那么省略customername 将符合SQL 标准(但据我所知只有Postgres 正确实现)
    猜你喜欢
    • 2020-01-01
    • 2019-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-14
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    相关资源
    最近更新 更多