sql - ORDER BY 别名不起作用

标签 sql postgresql group-by aggregate-functions

更新问题:

ERROR:  column "Fruits" does not exist

运行 Postgres 7.4(是的,我们正在升级)

为什么我不能按列别名进行排序?想要 ORDER BY 中的“TypeOfFruits”,为什么?

SELECT (CASE
    WHEN tof."TypeOfFruits" = 'A' THEN 'Apple' 
    WHEN tof."TypeOfFruits" = 'P' THEN 'Pear' 
    WHEN tof."TypeOfFruits" = 'G' THEN 'Grapes' 
    ELSE 'Other' END) AS "Fruits",
    SUM(CASE WHEN r.order_date 
        BETWEEN DATE_TRUNC('DAY', LOCALTIMESTAMP) AND DATE_TRUNC('DAY', LOCALTIMESTAMP) + INTERVAL '1 DAY' 
        THEN 1 ELSE 0 END) AS daily, 
    SUM(CASE WHEN r.order_date 
        BETWEEN DATE_TRUNC('MONTH', LOCALTIMESTAMP) AND DATE_TRUNC('MONTH', LOCALTIMESTAMP) + INTERVAL '1 MONTH' 
        THEN 1 ELSE 0 END) AS monthly, 
    SUM(CASE WHEN r.order_date 
        BETWEEN DATE_TRUNC('YEAR', LOCALTIMESTAMP) AND DATE_TRUNC('YEAR', LOCALTIMESTAMP) + INTERVAL '1 YEAR' 
        THEN 1 ELSE 0 END) AS yearly, 
    SUM(CASE WHEN r.order_date >= '01-01-2011 00:00:00' THEN 1 ELSE 0 END) AS lifetime 
FROM reports AS r, "TypeOfFruits" AS tof 
WHERE r.id = tof."ID" 
GROUP BY "Fruits"
ORDER BY CASE 
    WHEN "Fruits" = 'Apple' THEN 1 
    WHEN "Fruits" = 'Pear' THEN 2 
    WHEN "Fruits" = 'Grapes' THEN 3 
    ELSE 4 
END

目前的结果

Fruits;daily;monthly;yearly;lifetime
"Apple";17;1174;3136;3136
"Pear";28;94;94;94
"Grapes";0;191;490;490
"Other";0;2;27;27
"Other";0;0;1;1
"Other";0;0;27;27
"Other";0;6;28;28
"Other";0;58;229;229
"Other";0;3;3;3
"Other";0;0;1;1

所需的结果将是“其他”总数的一行,因此总共四行 (x 将是总数)

Fruits;daily;monthly;yearly;lifetime
"Apple";17;1174;3136;3136
"Pear";28;94;94;94
"Grapes";0;191;490;490
"Other";x;x;x;x

最佳答案

您可以使用 ORDER BY 1 按第一个字段“Fruits”排序。这同样适用于 GROUP BY

更新

对于订单,不是在 order by 中执行 case,而是在……说……第二个位置创建一个新列:

(CASE 
    WHEN "Fruits" = 'Apple' THEN 1 
    WHEN "Fruits" = 'Pear' THEN 2 
    WHEN "Fruits" = 'Grapes' THEN 3 
    ELSE 4 ) as Order

然后在你的 ORDER BY 2 中。

关于sql - ORDER BY 别名不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6458669/

相关文章:

mysql - 查找列值至少出现两次的行?

php - 防止多个数据库访问 (PHP)

mysql - 更改 mysql 查询以组合多列而不是单独的行

mysql - 如何在mysql中选择具有另一列子集的列?

mysql - MySQL中如何计算反向运行和

mysql - 如何在 MySQL 查询中转换 MySQL 日期?

postgresql - 如何将数据从 S3 加载到 PostgreSQL RDS

json - 如何对 jsonb 键执行 LIKE 查询?

postgresql - 为什么从资源API获取的tracking number和数据库记录的tracking number不一样?

group-by - Big Query 按分组字段排序