首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL按列排序,然后将大多数实例排序到最少

SQL按列排序,然后将大多数实例排序到最少
EN

Stack Overflow用户
提问于 2022-04-25 00:57:45
回答 1查看 50关注 0票数 0

我需要返回所有m_id,在cli_id有假cli_billstat的地方。然后,我需要按最大数量的cli_id排序到最少。

我的查询返回我需要的信息,但我无法以我想要的方式通过cli_id获得它。

我的代码:

代码语言:javascript
复制
SELECT CLIENT.CLI_ID, CLI_FNAME, CLI_LNAME, CLI_BILLSTAT, M_ID, M_DATE
FROM CLIENT, MEETING
WHERE CLIENT.CLI_ID = MEETING.CLI_ID
     AND CLI_BILLSTAT = False
GROUP BY CLIENT.CLI_ID, CLI_FNAME, CLI_LNAME, CLI_BILLSTAT, M_ID, M_DATE\\\

in the cli_id column it returns
cli_id
10
10
14
21
21
21

what I need is something like:
cli_id
21
21
21
10
10
14
22

我尝试过将COUNT(client.cli_id)添加为COUNT,然后按COUNT排序,但是它不会改变结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-25 12:13:30

您必须使用子查询,实质上重复连接查询,如下所示:

代码语言:javascript
复制
select 
    S1.CLI_ID,
    S1.CLI_FNAME,
    S1.CLI_LNAME, 
    S1.CLI_BILLSTAT, 
    S1.M_ID,
    S1.M_DATE,
    S1.Cnt
from 
  (SELECT ClntA.CLI_ID,
          ClntA.CLI_FNAME,
          ClntA.CLI_LNAME, 
          ClntA.CLI_BILLSTAT, 
          MtgA.M_ID,
          MtgA.M_DATE,
         (select count(*) 
          from CLIENT ClntB 
               Inner Join 
               MEETING MtgB 
               on ClntB.CLI_ID = MtgB.CLI_ID
          WHERE ClntB.CLI_BILLSTAT = False
             AND ClntB.cli_id=ClntA.cli_id) as Cnt
   FROM
        CLIENT ClntA 
        Inner Join 
        MEETING MtgA 
        on ClntA.CLI_ID = MtgA.CLI_ID
   WHERE ClntA.CLI_BILLSTAT = False
 ) S1
order by S1.cnt desc, S1.cli_id;

在大多数其他现代dbms产品中,这可以通过窗口功能来实现,但是MsAccess SQL缺乏这些功能。

如果CLI_ID是客户端表的主键,则可以大大缩短子查询。如果是这样的话,子查询只能计数与MtgB.CLI_ID=ClntA.CLI_ID会面的记录(不需要连接或子查询中的CLI_BILLSTAT )。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71993504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档