有没有办法使用自定义分组对 SQL 中的输出数据进行排序?

Posted

技术标签:

【中文标题】有没有办法使用自定义分组对 SQL 中的输出数据进行排序?【英文标题】:Is there a way to sort output data in SQL using custom groupings? 【发布时间】:2020-10-21 06:11:57 【问题描述】:

我正在寻找一种在 SQL 输出中创建自定义符号分组的方法。例如,我有一个看起来像这样的表。

Symbol        Date        Value
AAPL       2020-06-05     1,000
JBLU       2020-06-20     1,000
JBLU       2020-06-24     1,000
AMZN       2020-06-08     1,000
AAPL       2020-06-11     1,000
MSFT       2020-06-27     1,000
RDSA       2020-06-11     1,000
AAL        2020-06-16     1,000
JBLU       2020-06-28     1,000
RDSA       2020-06-11     1,000
AAL        2020-06-21     1,000

理想情况下,我希望创建自定义分组,在其中输出一个表格,该表格汇总了科技公司(AAPL、MSFT、AMZN)和航空公司(JBLU、AAL)等组的总数,并忽略了其他值 (RDSA),例如比如:

Class                  Value
Airlines               5,000
Tech Companies         4,000

【问题讨论】:

【参考方案1】:

您可以使用case 表达式。想法是使用where 子句过滤您感兴趣的symbols,然后在select 子句中对其进行解码:

select
    case when symbol in ('AAPL', 'MSFT', 'AMZN') 
        then 'Tech Companies'
        else 'Airlines'
    end class,
    sum(value) value
from mytable
where symbol in ('AAPL', 'MSFT', 'AMZN', 'JBLU', 'AAL')
group by 1

group by 的位置形式很方便避免重复 case 表达式。

【讨论】:

【参考方案2】:

你可以使用case:

select (case when symbol in ('AAPL', 'MSFT', 'AMZN') then 'Tech'
             when symbol in ('JBLU', 'AAL') then 'Airlines'
        end) as class, sum(value)
from t
group by class;

也就是说,我建议使用带有指定类的列的 symbols 表。

【讨论】:

以上是关于有没有办法使用自定义分组对 SQL 中的输出数据进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用自定义列对连接表进行分组

没有自定义 SQL 的 Dapper 中的多重映射

如何减少/删除分组 UITableView 中的左/右手边距?

THINKPHP中怎么对数据进行分组查询?

有没有办法对选择器进行分组? [复制]

SQL 查询 - 分组并计算最大值 - 最小值