我的mysql SELECT案例无法返回3列
我试图用下面的查询返回3列。当前查询工作正常我的mysql SELECT案例无法返回3列,mysql,Mysql,我试图用下面的查询返回3列。当前查询工作正常 SELECT cat, COUNT(*) as count FROM (SELECT case WHEN `cat_type` = 'PREMIUM' then '1' WHEN `cat_type` = 'NOT PREMIUM' then '2' WHE
SELECT cat, COUNT(*) as count FROM
(SELECT case WHEN `cat_type` = 'PREMIUM' then '1'
WHEN `cat_type` = 'NOT PREMIUM' then '2'
WHEN `cat_type` = 'GOLD' then '3'
WHEN `cat_type` = 'EXECUTIVE' then '4'
WHEN `cat_type` = 'NOT PROVIDED' then '-1'
else '-2'
end AS cat FROM `ab` AS s
JOIN `make` AS m
WHERE s.make_code = m.make_code
) AS someRandomAliasHere
GROUP BY cat
ORDER BY CAST(cat AS UNSIGNED) ASC
当我尝试返回另一列cat_类型时,我得到一个错误
SELECT cat, cat_type, COUNT(*) as count FROM ....
我得到的错误是
#1054 - Unknown column 'cat_type' in 'field list'
但是cat_类型确实存在于我的ab表中。知道我错过了什么吗?谢谢,ab表中存在您的cat_类型
但您的ab表不存在于主选择中。
它只存在于子查询中,该子查询在此处向您返回一些随机别名。
因此,您可能应该从选择案例的同一选择中选择cat_类型。
然后您应该可以访问它,但它可能会通过/count扰乱您的组
您将需要一个更高级的查询来查询您要查找的内容 ab表中存在您的cat_类型
但您的ab表不存在于主选择中。
它只存在于子查询中,该子查询在此处向您返回一些随机别名。
因此,您可能应该从选择案例的同一选择中选择cat_类型。
然后您应该可以访问它,但它可能会通过/count扰乱您的组
您将需要一个更高级的查询来查询您要查找的内容 您没有在此处选择cat_类型,因此它不可用于主选择。这应该可以解决这个问题:
SELECT cat, cat_type, COUNT(*) as count FROM
(SELECT case WHEN `cat_type` = 'PREMIUM' then '1'
WHEN `cat_type` = 'NOT PREMIUM' then '2'
WHEN `cat_type` = 'GOLD' then '3'
WHEN `cat_type` = 'EXECUTIVE' then '4'
WHEN `cat_type` = 'NOT PROVIDED' then '-1'
else '-2'
end AS cat, cat_type FROM `ab` AS s
JOIN `make` AS m
WHERE s.make_code = m.make_code
) AS someRandomAliasHere
GROUP BY cat, cat_type
ORDER BY CAST(cat AS UNSIGNED) ASC
您没有在此处选择cat_类型,因此它不可用于主选择。这应该可以解决这个问题:
SELECT cat, cat_type, COUNT(*) as count FROM
(SELECT case WHEN `cat_type` = 'PREMIUM' then '1'
WHEN `cat_type` = 'NOT PREMIUM' then '2'
WHEN `cat_type` = 'GOLD' then '3'
WHEN `cat_type` = 'EXECUTIVE' then '4'
WHEN `cat_type` = 'NOT PROVIDED' then '-1'
else '-2'
end AS cat, cat_type FROM `ab` AS s
JOIN `make` AS m
WHERE s.make_code = m.make_code
) AS someRandomAliasHere
GROUP BY cat, cat_type
ORDER BY CAST(cat AS UNSIGNED) ASC
您需要首先在子查询中包含该列,然后使用table.col引用该列 试试下面
SELECT someRandomAliasHere.cat_type, cat, COUNT(*) as count FROM
(SELECT cat_type, case WHEN `cat_type` = 'PREMIUM' then '1'
WHEN `cat_type` = 'NOT PREMIUM' then '2'
WHEN `cat_type` = 'GOLD' then '3'
WHEN `cat_type` = 'EXECUTIVE' then '4'
WHEN `cat_type` = 'NOT PROVIDED' then '-1'
else '-2'
end AS cat FROM `ab` AS s
JOIN `make` AS m
WHERE s.make_code = m.make_code
) AS someRandomAliasHere
GROUP BY cat
ORDER BY CAST(cat AS UNSIGNED) ASC
您需要首先在子查询中包含该列,然后使用table.col引用该列 试试下面
SELECT someRandomAliasHere.cat_type, cat, COUNT(*) as count FROM
(SELECT cat_type, case WHEN `cat_type` = 'PREMIUM' then '1'
WHEN `cat_type` = 'NOT PREMIUM' then '2'
WHEN `cat_type` = 'GOLD' then '3'
WHEN `cat_type` = 'EXECUTIVE' then '4'
WHEN `cat_type` = 'NOT PROVIDED' then '-1'
else '-2'
end AS cat FROM `ab` AS s
JOIN `make` AS m
WHERE s.make_code = m.make_code
) AS someRandomAliasHere
GROUP BY cat
ORDER BY CAST(cat AS UNSIGNED) ASC
您还需要选择列cat_类型,以便此处的SomeRandomAlias拥有该列
SELECT cat, cat_type, COUNT(*) as count FROM
(SELECT case WHEN `cat_type` = 'PREMIUM' then '1'
WHEN `cat_type` = 'NOT PREMIUM' then '2'
WHEN `cat_type` = 'GOLD' then '3'
WHEN `cat_type` = 'EXECUTIVE' then '4'
WHEN `cat_type` = 'NOT PROVIDED' then '-1'
else '-2'
end AS cat, cat_type FROM `ab` AS s
JOIN `make` AS m
WHERE s.make_code = m.make_code
) AS someRandomAliasHere
GROUP BY cat, cat_type
ORDER BY CAST(cat AS UNSIGNED) ASC
别忘了在GROUP BY中也添加cat类型。您还需要选择列cat类型,以便此处的SomeRandomAlias拥有该列
SELECT cat, cat_type, COUNT(*) as count FROM
(SELECT case WHEN `cat_type` = 'PREMIUM' then '1'
WHEN `cat_type` = 'NOT PREMIUM' then '2'
WHEN `cat_type` = 'GOLD' then '3'
WHEN `cat_type` = 'EXECUTIVE' then '4'
WHEN `cat_type` = 'NOT PROVIDED' then '-1'
else '-2'
end AS cat, cat_type FROM `ab` AS s
JOIN `make` AS m
WHERE s.make_code = m.make_code
) AS someRandomAliasHere
GROUP BY cat, cat_type
ORDER BY CAST(cat AS UNSIGNED) ASC
别忘了在GROUP BY中也添加cat_类型。您需要在子查询中包含cat_类型。我建议:
SELECT cat, cat_type, COUNT(*) as count
FROM (SELECT (case WHEN `cat_type` = 'PREMIUM' then 1
WHEN `cat_type` = 'NOT PREMIUM' then 2
WHEN `cat_type` = 'GOLD' then 3
WHEN `cat_type` = 'EXECUTIVE' then 4
WHEN `cat_type` = 'NOT PROVIDED' then -1
else -2
end) AS cat, *
FROM `ab` AS s JOIN
`make` AS m
USING (make_code)
) AS someRandomAliasHere
GROUP BY cat, cat_type
ORDER BY abs(cat) asc
注意以下几点:
将*添加到子查询以捕获所有列。
更改了联接语法。显式联接不仅更好,而且using子句允许使用*而不必担心联接列之间的名称重复。
删除了cat常量值中的单引号。您将这些视为按顺序排列的数字,因此使用数字作为值。
将订单更改为abs,而不是强制转换为unsigned。但是,您真的希望在此处不签名吗?
您需要在子查询中包含cat_类型。我建议:
SELECT cat, cat_type, COUNT(*) as count
FROM (SELECT (case WHEN `cat_type` = 'PREMIUM' then 1
WHEN `cat_type` = 'NOT PREMIUM' then 2
WHEN `cat_type` = 'GOLD' then 3
WHEN `cat_type` = 'EXECUTIVE' then 4
WHEN `cat_type` = 'NOT PROVIDED' then -1
else -2
end) AS cat, *
FROM `ab` AS s JOIN
`make` AS m
USING (make_code)
) AS someRandomAliasHere
GROUP BY cat, cat_type
ORDER BY abs(cat) asc
注意以下几点:
将*添加到子查询以捕获所有列。
更改了联接语法。显式联接不仅更好,而且using子句允许使用*而不必担心联接列之间的名称重复。
删除了cat常量值中的单引号。您将这些视为按顺序排列的数字,因此使用数字作为值。
将订单更改为abs,而不是强制转换为unsigned。但是,您真的希望在此处不签名吗?
所以我在这里添加了一些RandomAlias.cat_type在COUNT*之后?可能是因为Join。cat可能在两个表中,但不是cat类型。如果您的用例使用错误,请检查文档!你把这两个语法弄混了。所以我在这里添加了一些RandomAlias。在COUNT*之后键入cat_?可能是因为Join。cat可能在两个表中,但不是cat类型。如果您的用例使用错误,请检查文档!你把这两种语法混在一起了,这可能是原因,也可能是原因,我不得不把*替换成cat,fuel类型,直到那时它才起作用。我还使用CASTcat作为UNSIGNED,按cat_类型对其进行排序。1,2,3,4,-1我不得不将*更换为cat,fuel_型,直到那时它才起作用。我还使用CASTcat作为UNSIGNED,按cat_类型对其进行排序。1,2,3,4,-1