sql group忽略大小写和后缀或最后一个字母

时间:2018-05-14 12:03:41

标签: sql postgresql group-by

我有一张这样的表:

enter image description here

我将计算每个类别中的类别数量和行数。 我使用了这个查询:

enter image description here

但不幸的是苹果被视为单独的类别,因为它有" s"最后。

enter image description here

1 个答案:

答案 0 :(得分:0)

我建议您查看一些注释并重新构建数据,因为我认为它会导致您的问题,但是这个查询会做您想要的但不是很好。

CTE测试:

WITH fruit_table(Fruit, No_Fruit)
AS (
SELECT 'Apple', 3
UNION ALL
SELECT 'Apples', 2
UNION ALL
SELECT 'Orange', 1
UNION ALL
SELECT 'oranges', 2)

查询:

 SELECT DISTINCT
        LOWER(CASE
                  WHEN right(fruit, 1) = 's'
                  THEN left(fruit, -1)
                  ELSE fruit
              END),
        SUM(No_Fruit)
 FROM fruit_table
 GROUP BY LOWER(CASE
                    WHEN right(fruit, 1) = 's'
                    THEN left(fruit, -1)
                    ELSE Fruit
                END);

将有一种更优雅的方式来获得您想要的结果,更好的解决方案是修复您的架构,但......它的工作原理