当结果分组时,如何在mySQL中排序列值

发布于 2025-02-12 02:40:23 字数 1878 浏览 2 评论 0原文

我有三个数据库表项目,其中包含有关项目表的数据

project ”:

project_idname
10000项目1
20000项目2
30000项目3
40000项目4

tabl

收入FK_SETTING_ID
10000200010
10000330020
20000700010
30000100010
300001500020

表“ company company ”:

setter_idname
10marvel
20Univer

现在,我想按列值对项目进行排序 =“ 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_idname
10000Project 1
20000Project 2
30000Project 3
40000Project 4

Table "revenues":

project_idrevenuefk_setting_id
10000200010
10000330020
20000700010
30000100010
300001500020

Table "company":

setting_idname
10MARVEL
20UNIVER

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:

col1col2
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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

各空 2025-02-19 02:40:23

排序是通过“订单”完成的,在查询中没有看到。

SELECT column1, column 2…
FROM table_name
WHERE [condition]
GROUP BY column1, column2
ORDER BY column1, column2;

Sorting is done by "ORDER BY" is see none in your query.

SELECT column1, column 2…
FROM table_name
WHERE [condition]
GROUP BY column1, column2
ORDER BY column1, column2;
软甜啾 2025-02-19 02:40:23

获取子查询中的漫威收入,因此您可以对其进行排序。

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,
        MAX(CASE WHEN sas.name = 'MARVEL' THEN sid.revenue END) AS marvel_revenue
    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
ORDER BY stid.marvel_revenue DESC
LIMIT 0,20

Get the Marvel revenue in the subquery, so you can sort by it.

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,
        MAX(CASE WHEN sas.name = 'MARVEL' THEN sid.revenue END) AS marvel_revenue
    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
ORDER BY stid.marvel_revenue DESC
LIMIT 0,20
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文