sqlite 对具有内部联接的两个表使用LIMIT [重复]

oxf4rvwz  于 2022-12-23  发布在  SQLite
关注(0)|答案(1)|浏览(151)
    • 此问题在此处已有答案**:

Using LIMIT within GROUP BY to get N results per group?(14个答案)
昨天关门了。
下面的SQL代码工作正常,它的目的是显示每个用户订购的所有产品,并按产品降序排列。
当我试图限制客户及其相关产品的显示时出现问题,所以当我使用LIMIT 2时,我试图在ORDER BY行后立即插入LIMIT 2,但出现了一个问题:我只显示一个客户的2次购买,所以总共我只打印了2行。

cursor.execute('''SELECT Client.client_name, Purchases.product 
                  FROM Client
                  INNER JOIN Purchases 
                  ON Client.client_name = Purchases.client_name
                  ORDER BY client_name;''')

我想为每个客户打印2行。我应该在哪里以及如何输入LIMIT 2?你能告诉我吗?(尽量不要写太复杂的SQL,因为我对SQL了解很少,我想尽量保持代码简单)
在下面的例子中,我想打印James,George,Sophie并得到以下输出:

client_name | product   |
\------------+-----------+
James      | Hard Disk |
James      | Mouse     |
George     | Book      |
George     | Keyboard  |  
Sophie     | Mouse     |
Sophie     | Coffee    |

我使用的两个主要表如下:

    • 客户**
client_name |  born  |
-----------+---------+
James      |   1988  |
George     |   1988  |
Sophie     |   1988  |
    • 采购**
client_name | product   |
------------+-----------+
James      | Hard Disk |
James      | Mouse     |
George     | Book      |
George     | Keyboard  |  
Sophie     | Mouse     |
Sophie     | Coffee    |
Harry      | Cd        |
Harry      | Book      |
Lily       | Mouse     |
Lily       | Desk      |
piah890a

piah890a1#

您可以使用row_number窗口函数count为每个产品每个客户端分配一个编号,然后为其设置一个条件:

SELECT   client_name, product
FROM     (SELECT     Client.client_name, 
                     Purchases.product,
                     ROW_NUMBER() OVER (PARTITION BY Client.client_name 
                                        ORDER BY Purchases.product DESC) AS rn
          FROM       Client
          INNER JOIN Purchases  ON Client.client_name = Purchases.client_name) t
WHERE    rn <= 2
ORDER BY client_name ASC

相关问题