我的mysql SELECT案例无法返回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

我试图用下面的查询返回3列。当前查询工作正常

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