查询显示 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 年每个月的总利润降序排列?的主要内容,如果未能解决你的问题,请参考以下文章
oracle的SQL语句中,查询每个学生的的学号、姓名、平均成绩,结果按平均成绩降序排列。
在SQL server中查询每个学生的班级、学号、姓名、平均分,结果按平均分降序排列,平均分相同者按班级排列