假设我的下表中有数百种不同颜色的玩具......
---------------------------
ITEM | COST | COLOR
---------------------------
1 | 12.00 | BLUE
2 | 10.98 | RED
3 | 9.34 | BLUE
4 | 11.33 | WHITE
5 | 8.00 | YELLOW
. | . | .
. | . | .
. | . | .
Run Code Online (Sandbox Code Playgroud)
如果我想选择三个价格最低的蓝色玩具,我当然可以写...
SELECT * FROM TOYS WHERE Color = 'BLUE' ORDER BY COST LIMIT 3;
Run Code Online (Sandbox Code Playgroud)
但是,有没有办法可以选择一个具有独特数量的最低价黄色,白色和蓝色玩具,就像我说的那样......
SELECT * FROM TOYS WHERE COLOR = 'YELLOW' (LIMIT 1) AND COLOR = 'WHITE' (LIMIT 3) AND …Run Code Online (Sandbox Code Playgroud) 可能重复:
MySQL中的ROW_NUMBER()
这可能吗?我希望以特定顺序获得一堆结果,然后通过其id找出行的位置,例如:
1, foo
2, bar
3, foobar
Run Code Online (Sandbox Code Playgroud)
我想按字母顺序获得1的位置,它将返回2
如果我有一个包含以下结构和数据的表:
id | user_id | created_at
-------------------------
1 | 7 | 0091942
2 | 3 | 0000014
3 | 6 | 0000890
4 | 6 | 0029249
5 | 7 | 0000049
6 | 3 | 0005440
7 | 9 | 0010108
Run Code Online (Sandbox Code Playgroud)
我将使用什么查询来获得以下结果(以下说明):
id | user_id | created_at
-------------------------
1 | 7 | 0091942
6 | 3 | 0005440
4 | 6 | 0029249
7 | 9 | 0010108
Run Code Online (Sandbox Code Playgroud)
如你看到的:
user_id只返回一行.created_at是返回的行.有没有办法在不使用子查询的情况下 …
我想将行号作为我的查询列。由于我使用的是 MySql,我无法使用func.row_number()SqlAlchemy的内置功能。此查询的结果将被分页,因此我想在拆分发生之前保留行号。
session.query(MyModel.id, MyModel.date, "row_number")
Run Code Online (Sandbox Code Playgroud)
我尝试使用 anhybrid_property来增加MyModel我在查询之前重置的类内部的静态变量,但它没有用。
@hybrid_property
def row_number(self):
cls = self.__class__
cls.row_index = cls.row_index + 1
return literal(self.row_index)
@row_number.expression
def row_number(cls):
cls.row_index = cls.row_index + 1
return literal(cls.row_index)
Run Code Online (Sandbox Code Playgroud)
我还尝试将子查询与此解决方案混合使用:
session.query(myquery.subquery(), literal("@rownum := @rownum + 1 AS row_number"))
Run Code Online (Sandbox Code Playgroud)
但是我没有找到一种方法来为(SELECT @rownum := 0) r.
有什么建议?
编辑
目前,我正在循环分页查询的结果,并将从当前页面计算出的数字分配给每一行。
我想创建带有子菜单的菜单。因此,我需要做的就是显示menu_cat为主菜单(不重复),同时menu作为相关menu_cat.
像 DISTINCT 和 GROUP BY 这样的子句似乎适用于整行。由于我的搜索,我发现了这个链接:DISTINCT for only one Column
这正是我想要做的。但是我收到错误。以下是我的查询和 Phpmyadmin 错误。请帮我解决这个错误。
$query = "Select * FROM ('SELECT menu_cat,menu,manu_href,ROW_NUMBER() OVER(PARTITION BY menu_cat ORDER BY menu_id DESC) rn FROM menu')a WHERE rn = 1";
Run Code Online (Sandbox Code Playgroud)
错误:
#1064 - 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“SELECT menu_cat,menu,manu_href,ROW_NUMBER() OVER(PARTITION BY menu_cat ORDER BY”附近使用正确的语法
$query2 = "select menu_cat OVER (PARTITION BY menu_id) AS Cat,menu,menu_href from menu"
Run Code Online (Sandbox Code Playgroud)
错误:
#1064 - 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在第 1 行的“(PARTITION …
我有一个包含3个字段的表:
CUST_ORDER FULFILL_NO ITEM LOCATION
SA23 1 0233 11001
SA23 1 0243 13001
SA23 1 0513 14001
SA88 1 0873 15001
SA88 1 0533 17001
Run Code Online (Sandbox Code Playgroud)
我想对fulfill_no字段进行排序,以便数据变为:
CUST_ORDER FULFILL_NO ITEM LOCATION
SA23 1 0233 11001
SA23 2 0243 13001
SA23 3 0513 14001
SA88 1 0873 15001
SA88 2 0533 17001
Run Code Online (Sandbox Code Playgroud)
怎么做 ?