SQL查询返回前2个值

沼泽管

我试图返回客户数据库中订购量最高的2个项目。以下是我为最常订购商品提供的商品,但我在弄清楚如何为第二个最受订购商品创建另一列时遇到了麻烦。

创建第二列的最佳方法是什么?

SELECT FirstName, EmailAddress, Id, PreferredLocationId, 
(
     SELECT TOP 1 [Description] FROM [Order] o 
     INNER JOIN [OrderItem] oi ON oi.OrderId = o.OrderId
     WHERE o.CustomerId = Customer.Id
     GROUP BY [Description]
     ORDER BY COUNT(*) DESC
) AS MostOrderedItem
FROM Customer
GROUP BY FirstName, EmailAddress, Id, PreferredLocationId
丹尼尔·吉梅内斯

如果您使用的是SQL Server 2012,则有很多不同的处理方式。我将使用CTE来获取前两行并使用 ROW_NUMBER()

WITH cte AS (
  SELECT CustomerId, [Description]
    , ROW_NUMBER() OVER (PARTITION BY CustomerId ORDER BY COUNT(*) DESC) [RowID]
  FROM [Order] o 
  INNER JOIN [OrderItem] oi ON oi.OrderId = o.OrderId
  GROUP BY CustomerId, [Description]
)
SELECT FirstName, EmailAddress, Id, PreferredLocationId, cte1.Description, cte2.Description
FROM Customer
LEFT JOIN cte cte1 ON cte1.CustomerID = Customer.CustomerId AND cte1.RowID = 1
LEFT JOIN cte cte2 ON cte2.CustomerID = Customer.CustomerId AND cte2.RowID = 2

公用表表达式创建所有客户,描述及其行号的列表。请注意,如果您有关系,则不会保证先描述哪个。您可以添加到开窗功能说明中,以便在有平局的情况下,打破平局的任何字母都在字母表中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

sql查询仅返回1个值

来自分类Dev

返回查询结果中前5个值的AVG

来自分类Dev

2个查询的sql加法返回NULL

来自分类Dev

SQL查询帮助-CASE STATEMENT返回2行或更多行-选择其中的一个值

来自分类Dev

如何根据多列值返回前 2 个值

来自分类Dev

SQL查询以从多个标签返回最后一个值

来自分类Dev

SQL查询返回重复值

来自分类Dev

SQL 查询返回“值太长”

来自分类Dev

SQL 查询返回双倍值

来自分类Dev

SQL查询返回多个值

来自分类Dev

SQL查询:根据值获取前五个元组,其中某些元组的值可能相同

来自分类Dev

子查询为2个几乎相同的查询返回不同的值

来自分类Dev

如果任一匹配查询,则返回 2 个值的结果的 MySQL 查询

来自分类Dev

在SQL选择查询中,删除前0个值和后0个值,但不删除中间的值

来自分类Dev

sqldf查询返回0个值

来自分类Dev

t-sql根据前5个查询选择所有值

来自分类Dev

SQL将前2个字段值合并为1个值

来自分类Dev

SQL将前2个字段值合并为1个值

来自分类Dev

如果where子句是零的整数,为什么SQL查询返回一个值?

来自分类Dev

子查询返回了1个以上的值。在SQL Server 2012中使用where子句

来自分类Dev

将SQL的返回值用作另一个查询中的参数

来自分类Dev

SQL WHERE NOT IN 查询返回另一个表中的值

来自分类Dev

子查询返回了 1 个以上的值。在 SQL Server 2005 中

来自分类Dev

SQL 子查询只返回一个值。如何使这段代码高效?

来自分类Dev

SQL 子查询从 if else 语句返回了 1 个以上的值

来自分类Dev

SQL 查询返回 2 个结果,但在 c# 网页中仅显示 1 个结果

来自分类Dev

SQL查询返回的值超出指定范围

来自分类Dev

SQL子查询返回了多个值

来自分类Dev

SQL查询结果不返回空值

Related 相关文章

热门标签

归档