我有两个表Companies
和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
现在我得到按名称排序的结果,但不按计数排序
答案 0 :(得分:4)
始终发布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
ORDER BY CCount desc
会将较大的数字放在最顶层。在每组相同的ccounts中,名称将按降序排序。 “第二个”在最后一行,因为它的ccount是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
将按公司名称降序排序。在每组相同的公司名称中,ccounts将按降序排序。由于不能有任何相同公司名称的组(为什么?),对ccount的排序没有任何影响。
答案 1 :(得分:2)
SQL中的ORDER BY子句可以对多个列进行排序,它按顺序列出的字段进行排序,即首先按第一个字段排序,然后在字段值重复的位置按第二个字段排序
ORDER BY Name DESC,Count DESC
Smith 9
Smith 5
Smith 2
Jones 9
Doe 9
前三行有重复的名称,因此按计数
排序ORDER BY Count DESC,名称DESC
Smith 9
Jones 9
Doe 9
Smith 5
Smith 2
前三行有重复计数,因此按名称排序
如果这些都不是您想要的,请编辑您的问题,按照您要查找的顺序添加记录的样本列表。