MySQL到PostgreSQL查询别名分组依据
我有一张像这样的桌子 id | number --------------- 1 56721 2 56722 3 43981 4 43982 5 43983 6 43984MySQL到PostgreSQL查询别名分组依据,mysql,postgresql,group-by,sql-order-by,alias,Mysql,Postgresql,Group By,Sql Order By,Alias,我有一张像这样的桌子 id | number --------------- 1 56721 2 56722 3 43981 4 43982 5 43983 6 43984 对此,对应的PostgreSQL查询是什么?为了更清楚,请将其包装到子查询中: SELECT class, subclass FROM ( SELECT CASE substr(number,1,2) WHEN '5
对此,对应的PostgreSQL查询是什么?为了更清楚,请将其包装到子查询中:
SELECT class, subclass
FROM
(
SELECT CASE substr(number,1,2) WHEN '56' then 'class1' WHEN '43' then 'class2' else 'other' END as class,
CASE substr(number,3,2) WHEN '72' then 'subclass1', WHEN '98' then 'subclass2' ELSE 'other' END as subclass
FROM table
) x
GROUP BY class, subclass
HAVING class != 'other' AND subclass != other
ORDER BY class ASC, subclass DESC;
若这个数字实际上存储为一个对我来说有意义的数字,那个么您需要处理类型转换。MySQL支持数值上的substr,但不支持Postgres:
SELECT class, subclass, count(*)
FROM (SELECT (CASE substr(numstr,1,2) WHEN '56' then 'class1'
WHEN '43' then 'class2'
else 'other'
END) as class,
(CASE substr(numstr,3,2) WHEN '72' then 'subclass1'
WHEN '98' then 'subclass2'
ELSE 'other'
END) as subclass
FROM (select t.*, cast(number as varchar(255)) as numstr
from table t
) t
) t
WHERE class <> 'other' AND subclass <> 'other'
GROUP BY class, subclass
ORDER BY class ASC, subclass DESC;
我还将having子句中的比较改为子类“other”。没有名为other的列,因此我假设您指的是值。对于您的答案,PostgreSQL给我一个类似列表的错误。数字必须出现在GROUP BY子句中或用于聚合function@Revan您是从当前的答案中还是从以前的版本中得到这个错误的?因为我看不出它是如何发生在当前的一个上的。对于您的答案,PostgreSQL给我一个类似列table的错误。numstr必须出现在GROUP BY子句中或在聚合中使用function@RevanDarth . . . 这毫无意义。您是否有一个子查询的计数*?它应该只出现在外部查询上。
SELECT class, subclass, count(*)
FROM (SELECT (CASE substr(numstr,1,2) WHEN '56' then 'class1'
WHEN '43' then 'class2'
else 'other'
END) as class,
(CASE substr(numstr,3,2) WHEN '72' then 'subclass1'
WHEN '98' then 'subclass2'
ELSE 'other'
END) as subclass
FROM (select t.*, cast(number as varchar(255)) as numstr
from table t
) t
) t
WHERE class <> 'other' AND subclass <> 'other'
GROUP BY class, subclass
ORDER BY class ASC, subclass DESC;