mysql - 尝试编写一个查询来获取最高和最低收入并打印帐户健康状况?

标签 mysql sql subquery

我们正在尝试编写一个向我们展示的查询:

收入最高和最低的节目并打印他们的账户健康状况

这是我们必须开始的:

置顶

Select TOP 5 * From Health, Revenue
From Program_T, Account_T
Order by Revenue;

底部

Select BOTTOM 5 * From Health, Revenue
From Program_T, Account_T
Order by Revenue;

下面是表格:

Program_T 表:

(AccountName varchar(150) not null unique,
ProgramID int not null,
Revenue int,
Advocates int,
Shares int,
Conversions int,
Impressions int,
LaunchDate date,
CSMID int not null,
constraint Program_PK primary key (AccountName, CSMID),
constraint Program_FK1 foreign key (AccountName) references Account_T(AccountName),
constraint Program_FK2 foreign key (CSMID) references CSM_T(CSMID));

Account_T 表:

create table Account_T
(AccountName varchar(150) not null unique,
Health varchar(10) not null,
EcommercePlatform varchar(50),
CSMID int not null,
Industry varchar(50),
Amount int not null,
constraint Accounts_PK primary key (AccountName),
constraint Accounts_FK foreign key (CSMID) references CSM_T(CSMID));

最佳答案

在 MySQL 中获取 TOP 行的子句是 LIMIT .您订购升序或降序以获得顶部或底部的行。正如您想要的那样,这意味着您将使用 UNION ALL 粘贴的两个查询结果.由于每个查询都有一个 ORDER BY子句,您需要括号来向 DBMS 显示 ORDER BY 是什么条款指的是。最后你想要一个 final ORDER BY子句,因为 UNION ALL 的结果不保证一定会被订购。

select revenue, health
from
(
  (
    select p.revenue, a.health
    from program_t p
    join account_t a using (accountname)
    order by p.revenue asc limit 5
  )
  union all
  (
    select p.revenue, a.health
    from program_t p
    join account_t a using (accountname)
    order by p.revenue desc limit 5
  )
) glued
order by revenue;

从 MySQL 8 开始,您还可以使用 ROW_NUMBER对您的行进行排名,这可能会或可能不会更快:

select revenue, health
from
(
  select
    p.revenue, a.health,
    row_number() over (order by p.revenue asc) as rn1,
    row_number() over (order by p.revenue desc) as rn2
  from program_t p
  join account_t a using (accountname)
) numbered
where rn1 <= 5 or rn2 <= 5
order by revenue;

至于联接,您可以使用 USING如上所示的子句或使用 ON :

from program_t p
join account_t a on a.accountname = p.accountname

关于mysql - 尝试编写一个查询来获取最高和最低收入并打印帐户健康状况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55125212/

相关文章:

php - PHP 页面上的 MySQL 语法错误

php - 在这种情况下如何转义引号?

mysql - 查找过去 24 小时内具有日期字段的记录

java - 实体异常映射中的重复列

sql - 将 or-filter 更改为 and-filter 用于连接表的 `column = ANY()` 比较

mysql - SQL LOAD DATA INFILE 问题

ruby-on-rails-3.1 - activerecord 中的子查询

mysql - 一次将相同的固定百分比插入多行

sql - Oracle:如何在比较操作中从子查询中引用带有空格的别名

mysql - 使用内连接、左连接或右连接来连接 2 个表