在一个列上应用 distinct 并在另一列上按 count 排序

Posted

技术标签:

【中文标题】在一个列上应用 distinct 并在另一列上按 count 排序【英文标题】:Apply distinct on one column and order by on another with count 【发布时间】:2022-01-09 05:03:49 【问题描述】:

mysql DB 中我有

 CustomerId  productId  modelNumber
  CAnWgsN0    C9407R       300     
  CAnWgsN0    C5861W       300       
  CAnWgsN0    C9407R       400       
  CAnWgsN0    C5861W       600       
  CAnWgsN0    C9407R       300       
  KAuK9nB     K3150Z       100       
  KAuK9nB6    K3150Z       100       

我希望我的输出为

customerId   productId   modelNumber  Count
 CAnWgsN0     C9407R        300         2
 CAnWgsN0     C9407R        400         1
 CAnWgsN0     C5861W        300         1
 CAnWgsN0     C5861W        600         1
 KAuK9nB6     K3150Z        100         2

我正在尝试使用此查询,但没有得到想要的结果。如何在 modelNumber 上应用 distinct,然后按 productId 分组。

SELECT  *
FROM    (SELECT customerId, productId, COUNT(modelNumber) As count, 
                ROW_NUMBER() OVER (PARTITION BY modelNumber ORDER BY productId) AS RowNumber
         FROM   customers) AS a
WHERE   a.RowNumber <=100 ;

它只返回一行。我也尝试过这个查询,但没有运气

SELECT productId, customerId, modelNumber, COUNT(modelNumber) AS count
FROM customers
WHERE modelNumber IN (SELECT DISTINCT modelNumber from customer ORDER BY productId);

【问题讨论】:

【参考方案1】:

除非我遗漏了什么,否则你只想GROUP BY customerId, productId, modelNumber

WITH customers AS (
  (SELECT 'CAnWgsN0' AS customerId, 'C9407R' AS productId, 300 AS modelNumber ) UNION ALL
  (SELECT 'CAnWgsN0', 'C5861W', 300) UNION ALL
  (SELECT 'CAnWgsN0', 'C9407R', 400) UNION ALL
  (SELECT 'CAnWgsN0', 'C5861W', 600) UNION ALL
  (SELECT 'CAnWgsN0', 'C9407R', 300) UNION ALL
  (SELECT 'KAuK9nB6', 'K3150Z', 100) UNION ALL
  (SELECT 'KAuK9nB6', 'K3150Z', 100))

SELECT customerId, productId, modelNumber, COUNT(*) AS count
FROM customers
GROUP BY customerId, productId, modelNumber;

【讨论】:

以上是关于在一个列上应用 distinct 并在另一列上按 count 排序的主要内容,如果未能解决你的问题,请参考以下文章

在另一列上查找最近的时间戳并在新列中添加值 PySpark

内连接恰好在一列上,而在另一列上模糊

选择一列上的值在另一列上具有相同的一组值

MySQL sum 和 distinct 在具有多个连接的另一列上

在一列上排名表,同时在另一列上排序

PostgreSQL 中的高效全文搜索,在另一列上排序