Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 为派生表选择数据时获取未知列错误_Mysql_Subquery_Derived Table - Fatal编程技术网

Mysql 为派生表选择数据时获取未知列错误

Mysql 为派生表选择数据时获取未知列错误,mysql,subquery,derived-table,Mysql,Subquery,Derived Table,我需要一个查询来创建一个表,计算给定字段中每个值的数量,但由于此表中的数据不足,我不得不加入另一个表以获得一个附加值NName: Records_table-------------- Name_table--------- Ref Score Iteration Ref NName 1 High 1 1 Falcon 1 Middle 2

我需要一个查询来创建一个表,计算给定字段中每个值的数量,但由于此表中的数据不足,我不得不加入另一个表以获得一个附加值NName:

Records_table--------------       Name_table---------
Ref    Score     Iteration        Ref      NName
1      High      1                1        Falcon
1      Middle    2                2        Willow
2      Middle    1                3        Lance
2      Middle    2                4        Ranger
2      Low       3
3      Low       1
4      High      1
4      High      2
4      High      3
所需输出:

NName      High  Middle  Low
Falcon     1     1       0
Willow     0     2       1
Lance      0     0       1
Ranger     3     0       0
这就是我所拥有的: 编辑,因为我注意到我在选择字段中留下了我在我的版本中删除的参考

SELECT 
    tc.nname AS NName, 
    COUNT(High) High,
    COUNT(Middle) Middle,
    COUNT(Low) Low
FROM
    (SELECT 
        NName, 'High' High, NULL Middle, NULL Low
    FROM
        records_table tr
        JOIN name_table tc ON tc.ref = tr.ref
    WHERE
        tr.score = 'High'
    UNION ALL 
    SELECT 
       NName, NULL, 'Middle', NULL
   FROM
       records_table tr
        JOIN name_table tc ON tc.ref = tr.ref
   WHERE
       tr.score = 'Middle'
    UNION ALL
    SELECT 
       NName, NULL, NULL, 'Low'
   FROM
       records_table tr
        JOIN name_table tc ON tc.ref = tr.ref
   WHERE
       tr.score = 'Low' ) T 
GROUP BY NName;
此操作失败,错误为1054 42S22:“字段列表”中的未知列“NName”


我做错了什么,我需要做什么才能使这项工作正常?

您的表别名不是tc,那么您应该在主选择中使用T.nname

    SELECT 
            T.`NNAME` AS NName, 
            COUNT(High) High,
            COUNT(Middle) Middle,
            COUNT(Low) Low
    FROM  ( 
        SELECT 
                Ref,`NNAME`, 'High' High, NULL Middle, NULL Low
        FROM  records_table tr
        JOIN name_table tc ON tc.ref = tr.ref
        WHERE tr.score = 'High'
        UNION ALL 
        SELECT 
               Ref,`NNAME`, NULL, 'Middle', NULL
        FROM records_table tr
        JOIN name_table tc ON tc.ref = tr.ref
        WHERE tr.score = 'Middle'
        UNION ALL
        SELECT 
               Ref,`NNAME`, NULL, NULL, 'Low'
        FROM records_table tr
        JOIN name_table tc ON tc.ref = tr.ref
        WHERE tr.score = 'Low' 
    ) T 
    GROUP BY T.`NNAME`;

虽然不是严格意义上的问题是什么,这是一个封闭的问题,@scaisEdge给出了正确的答案,但我不认为工会是最好的方式。考虑条件聚集< /P>
select n.ref,n.nname,
          sum(case when score = 'high' then 1 else 0 end) High,
          sum(case when score = 'middle' then 1 else 0 end) middle,
          sum(case when score = 'low' then 1 else 0 end) low
from n 
join r on r.ref = n.ref
group by n.ref,n.nname;

+------+--------+------+--------+------+
| ref  | nname  | High | middle | low  |
+------+--------+------+--------+------+
|    1 | Falcon |    1 |      1 |    0 |
|    2 | Willow |    0 |      2 |    1 |
|    3 | Lance  |    0 |      0 |    1 |
|    4 | Ranger |    3 |      0 |    0 |
+------+--------+------+--------+------+
4 rows in set (0.00 sec)

您是否可以执行内部SELECT,即带有联合的SELECT,并查看您在输出中看到的列名?我想我会使用条件聚合进行不同的操作。@Darshan Mehta,我只执行了第一个,因为我在开始时不再有SELECT语句,我不得不用NName代替现场名称tc.NName,这很有效。但是,当我再次运行整个程序时,它仍然失败:从SELECT tc.nname中选择tc.nname作为nname,COUNTHigh High,COUNTMiddle Middle,COUNTLow Low,“High”High,NULL Middle,tc.ref=tr.ref,其中tr.score='High'UNION ALL上的记录\u table tr JOIN name\u table tc为NULL Low。。。。。。。其中tr.score=根据tc.nname划分的“低”T组;错误1054 42S22:未知列“cases.project”在“field list”中@P Salmon,您是明星,工作过一次,将在下面发布完整的解决方案,谢谢。您的查询中可能有一些垃圾字符,请尝试重新键入与NNAME相关的代码。。删除逗号之间的所有字符或用bactik包装colname..谢谢你-根据你上面的问题,我用COUNT而不是SUM得出了相同的结论,但本质上是一样的-非常感谢!