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]似乎你们是对的,这个问题很奇怪;)非常感谢你的解释,我当时的心情很奇怪。