SQL 城市升序,人物降序

SQL ordering cities ascending and persons descending

我一直卡在复杂的问题中。我不知道这个SQL的版本,是学校版。但是现在无论如何都不是相关信息。

我希望城市升序排列,数字降序排列。对于递减数字,我的意思是当同一个城市出现几次时,它首先订购最大的数字。

我还需要行号,我试过SELECT ROW_NUMBER() OVER(ORDER BY COUNT(FIRST_NAME)) row没有成功。

我有两个表,分别是 CUSTOMERSEMPLOYEES。他们都有 FIRST_NAME, LAST_NAME, CITY.

现在我有这样的代码:

SELECT 
CITY, COUNT(FIRST_NAME),
CASE WHEN COUNT(FIRST_NAME) >= 0 THEN 'CUSTOMERS'
END
FROM CUSTOMERS
GROUP BY CITY

UNION

SELECT 
CITY, COUNT(FIRST_NAME),
CASE WHEN COUNT(FIRST_NAME) >= 0 THEN 'EMPLOYEES'
END
FROM EMPLOYEES
GROUP BY CITY

这个 SQL 代码给我这样的列表:

CITY
NEW YORK    2   CUSTOMERS
MIAMI       1   CUSTOMERS
MIAMI       4   EMPLOYEES
LOS ANGELES 1   CUSTOMERS
CHIGACO     1   CUSTOMERS
HOUSTON     1   CUSTOMERS
DALLAS      2   CUSTOMERS
SAN JOSE    2   CUSTOMERS
SEATTLE     2   CUSTOMERS
SEATTLE     5   EMPLOYEES
BOSTON      1   CUSTOMERS
BOSTON      3   EMPLOYEES

我希望它看起来像这样:

ROW  CITY
1    NEW YORK    2  CUSTOMERS
2    MIAMI       4  EMPLOYEES
3    MIAMI       1  CUSTOMERS
4    LOS ANGELES 1  CUSTOMERS
5    CHIGACO     1  CUSTOMERS
6    HOUSTON     1  CUSTOMERS
7    DALLAS      2  CUSTOMERS
8    SAN JOSE    2  CUSTOMERS
9    SEATTLE     5  EMPLOYEES
10   SEATTLE     2  CUSTOMERS
11   BOSTON      3  EMPLOYEES
12   BOSTON      1  CUSTOMERS

您可以在 ORDER BY:

中使用 window 函数
SELECT c.*
FROM ((SELECT CITY, COUNT(*) as cnt, 'CUSTOMERS' as WHICH
       FROM CUSTOMERS
       GROUP BY CITY
      ) UNION ALL
      (SELECT CITY, COUNT(*), 'EMPLOYEES'
       FROM EMPLOYEES
       GROUP BY CITY
      )
     ) c
ORDER BY MAX(cnt) OVER (PARTITION BY city) DESC,
         city,
         cnt DESC;