Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用join和count按多列排序_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 使用join和count按多列排序

Sql 使用join和count按多列排序,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有两个表companys和Contact,它们是一对多的关系,我想 选择公司名称、联系人数量和他们的下一个订单,但这不起作用 SELECT comp.Name , count(cc.Id) CCount FROM Contacts cc JOIN Companies comp ON comp.Id = cc.Company_id GROUP BY comp.Name ORDER BY CCount desc, comp.Name desc 现在我得到的结果是按联系人计数排序的,而不是按姓

我有两个表
companys
Contact
,它们是一对多的关系,我想 选择公司名称、联系人数量和他们的下一个订单,但这不起作用

SELECT comp.Name , count(cc.Id) CCount 
FROM Contacts cc JOIN Companies comp ON comp.Id = cc.Company_id
GROUP BY comp.Name 
ORDER BY CCount desc, comp.Name desc
现在我得到的结果是按联系人计数排序的,而不是按姓名排序的

SELECT comp.Name , count(cc.Id) CCount 
FROM Contacts cc JOIN Companies comp ON comp.Id = cc.Company_id
GROUP BY comp.Name 
ORDER BY comp.Name desc, CCount desc

现在我得到了按名称而不是按计数排序的结果

SQL中的ORDER by子句可以对多列进行排序,它按字段的顺序进行排序,即首先按第一个字段排序,然后在重复字段值的地方按第二个字段排序


按名称说明订购,按计数说明订购

Smith    9
Smith    5
Smith    2
Jones    9
Doe      9
前三行具有重复的名称,因此它们按计数排序


按计数说明、名称说明排序

Smith    9
Jones    9
Doe      9
Smith    5
Smith    2
前三行重复计数,因此按名称排序



如果这两项都不是您想要的,请编辑您的问题并按您要查找的顺序添加记录的示例列表。

始终发布DDL和INSERT语句。这是我所期望的

create table companies (
  id integer primary key,
  name varchar(10)
);

create table contacts (
  id integer primary key,
  company_id integer references companies (id)
);

insert into companies values (1, 'First');
insert into companies values (2, 'Second');
insert into companies values (3, 'Third');

-- Companies 'First' and 'Third' both have 3 contacts.
insert into contacts values (100,1);
insert into contacts values (101,1);
insert into contacts values (102,1);
insert into contacts values (201,2);
insert into contacts values (301,3);
insert into contacts values (302,3);
insert into contacts values (303,3);
你的第一个问题

SELECT comp.Name , count(cc.Id) CCount 
FROM Contacts cc JOIN Companies comp ON comp.Id = cc.Company_id
GROUP BY comp.Name 
ORDER BY CCount desc, comp.Name desc

name    ccount
--
Third   3
First   3
Second  1
orderbyccountdesc
将把较大的数字放在顶部。在每组相同的帐户中,名称将按降序排列。“Second”在最后一行,因为它的帐户是1

你的第二个问题

SELECT comp.Name , count(cc.Id) CCount 
FROM Contacts cc JOIN Companies comp ON comp.Id = cc.Company_id
GROUP BY comp.Name 
ORDER BY comp.Name desc, CCount desc

name    ccount
--
Third   3
Second  1
First   3

ORDER BY comp.Name desc
将按公司名称降序排序。在相同公司名称的每组中,会计科目将按降序排序。因为不能有任何相同公司名称的组(为什么?),所以按帐户排序没有任何效果

你能给我们看一些实际的结果吗?你期望的是什么?订单很好。这个问题似乎很奇怪[t-clausen.dk]似乎你们是对的,这个问题很奇怪;)非常感谢你的解释,我当时的心情很奇怪。