当结果分组时,如何在mySQL中排序列值
我有三个数据库表项目,其中包含有关项目表的数据
project ”:
project_id | name |
---|---|
10000 | 项目1 |
20000 | 项目2 |
30000 | 项目3 |
40000 | 项目4 |
tabl
“ | 收入 | FK_SETTING_ID |
---|---|---|
10000 | 2000 | 10 |
10000 | 3300 | 20 |
20000 | 7000 | 10 |
30000 | 1000 | 10 |
30000 | 15000 | 20 |
表“ company company ”:
setter_id | name |
---|---|
10 | marvel |
20 | Univer |
现在,我想按列值对项目进行排序 =“ desc/asc”)
“ | ” order_by |
---|---|
marvel | = ,“收入”:“ 7000”}] |
10000 | [{“ name”:“ Marvel”,“收入”:“ 2000”},{“ name”:“ Univer”,“收入”,“收入”:“ 3300”}] |
30000 | [ {“名称”:“ Marvel”,“收入”:“ 1000”},{“ name”:“ Univer”,“收入”:“ 15000”}] |
40000 |
我正在使用此查询,但不知道如何对此类模型进行排序以获得上述结果:
SELECT p.project_id, p.name, stid.settings
FROM project p
LEFT JOIN (SELECT sid.project_id,
CONCAT('[', GROUP_CONCAT(
JSON_OBJECT(
'name', sas.name
,'revenue', sid.revenue
) SEPARATOR ',')
,']') AS settings
FROM revenues sid
JOIN company sas ON sas.fk_setting_id = sid.setting_id
GROUP BY sid.project_id) stid ON stid.project_id = p.project_id
LIMIT 0,20
I have three database tables projects which contains data about projects
Table "project":
project_id | name |
---|---|
10000 | Project 1 |
20000 | Project 2 |
30000 | Project 3 |
40000 | Project 4 |
Table "revenues":
project_id | revenue | fk_setting_id |
---|---|---|
10000 | 2000 | 10 |
10000 | 3300 | 20 |
20000 | 7000 | 10 |
30000 | 1000 | 10 |
30000 | 15000 | 20 |
Table "company":
setting_id | name |
---|---|
10 | MARVEL |
20 | UNIVER |
Now, I want to sort projects by column value [input = (sort_key = "MARVEL" order_by="DESC/ASC")] for example give me project sorted by "MARVEL"'s revenue DESC such that I get the results in order mentioned below:
col1 | col2 |
---|---|
20000 | [{"name": "MARVEL", "revenue": "7000"}] |
10000 | [{"name": "MARVEL", "revenue": "2000"},{"name": "UNIVER", "revenue": "3300"}] |
30000 | [{"name": "MARVEL", "revenue": "1000"},{"name": "UNIVER", "revenue": "15000"}] |
40000 |
I'm using this query but don't know how to perform sorting on such models to get desired above mentioned results:
SELECT p.project_id, p.name, stid.settings
FROM project p
LEFT JOIN (SELECT sid.project_id,
CONCAT('[', GROUP_CONCAT(
JSON_OBJECT(
'name', sas.name
,'revenue', sid.revenue
) SEPARATOR ',')
,']') AS settings
FROM revenues sid
JOIN company sas ON sas.fk_setting_id = sid.setting_id
GROUP BY sid.project_id) stid ON stid.project_id = p.project_id
LIMIT 0,20
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
排序是通过“订单”完成的,在查询中没有看到。
Sorting is done by "ORDER BY" is see none in your query.
获取子查询中的漫威收入,因此您可以对其进行排序。
Get the Marvel revenue in the subquery, so you can sort by it.