查询显示 2010 年每个月的总利润降序排列?

Posted

技术标签:

【中文标题】查询显示 2010 年每个月的总利润降序排列?【英文标题】:Query that shows the total profit in descending order for each month in 2010? 【发布时间】:2016-04-18 17:47:27 【问题描述】:

我应该编写一个查询,以降序显示 2010 年每个月的总利润。

到目前为止,我有一个查询以降序显示 2010 年的总利润,我有一个可以提取每个月的查询,但我似乎无法将两者联系起来。

select (SalesPrice - AcquisitionPrice) profit, datesold
from Transaction
where DateSold >= '10-jan-01' and DateSold <= '10-dec-31';

和:

select to_char(datesold, 'mon')
from transaction
group by to_char(datesold, 'mon')

【问题讨论】:

必须是mysql。第二个查询不会在 Oracle 中运行。此外,如果没有 Oracle 中的 to_date(thingie, format_mask),日期数学将无法工作。 @TGray 如果NLS_DATE_FORMAT 参数设置为YY-MON-DD,它将在Oracle 中工作,因为Oracle 将尝试使用NLS_DATE_FORMAT 会话参数对字符串文字执行隐式TO_DATE( datevalue, format_mask )格式掩码。最好明确指定格式掩码(因为客户端可以更改会话参数)或使用 ANSI/ISO 日期文字。 @MT0,你是对的。作为顾问,我从不使用该参数,因为我的客户数据库之间没有共同点,而且其中一些正在使用非常旧的版本(想想 v6.0.27)。我发现始终格式化日期是一个好习惯。 YMMV :) 【参考方案1】:

Oracle 查询

SELECT TRUNC( datesold, 'MM' ) AS "Month",
       SUM( SalesPrice - AcquisitionPrice ) AS profit
FROM   Transaction
WHERE  EXTRACT( YEAR FROM datesold ) = 2010
GROUP BY TRUNC( datesold, 'MM' )
ORDER BY TRUNC( datesold, 'MM' ) DESC

MySQL 和 Oracle 查询

SELECT EXTRACT( MONTH FROM datesold ) AS mnth,
       SUM( SalesPrice - AcquisitionPrice ) AS profit
FROM   Transaction
WHERE  EXTRACT( YEAR FROM datesold ) = 2010
GROUP BY EXTRACT( MONTH FROM datesold )
ORDER BY EXTRACT( MONTH FROM datesold ) DESC

【讨论】:

以上是关于查询显示 2010 年每个月的总利润降序排列?的主要内容,如果未能解决你的问题,请参考以下文章

access怎么在查询中把来自两个表的值加在一起?

mysql查询近半年每个月的总记录数

oracle的SQL语句中,查询每个学生的的学号、姓名、平均成绩,结果按平均成绩降序排列。

在SQL server中查询每个学生的班级、学号、姓名、平均分,结果按平均分降序排列,平均分相同者按班级排列

select语句对对查询结果排序时,用( )子句指定排序字段,使用( )指定升序,使用( )降序。

SQL语言中按月查询