简体   繁体   English

使用多个子查询的字段列表中的 SQL 错误未知列

[英]SQL error Unknown column in field list using multiple subquery

I'm trying to print the text based on the column.我正在尝试根据列打印文本。 My idea was union all the count on each occupation and use a case to display it.我的想法是将每个职业的所有计数结合起来,并用一个案例来展示它。 But I'm not sure what is wrong with this code.但我不确定这段代码有什么问题。 Getting a error as sCount is not in field list.由于 sCount 不在字段列表中,因此出现错误。 Any help is appreciated.任何帮助表示赞赏。

SELECT  CASE

        WHEN Occupation = "doctor" THEN
        CONCAT("There are a total of ", dCount, " " , Occupation, "s.")
        
        WHEN Occupation = "singer" THEN
        CONCAT("There are a total of ", sCount, " " , Occupation, "s.")
        
        END
FROM (
    SELECT * FROM (
        SELECT COUNT(Occupation) AS dCount, Lower(Occupation) AS Occupation FROM OCCUPATIONS WHERE Occupation = 'Doctor'
    UNION
        SELECT COUNT(Occupation) AS sCount, Lower(Occupation) AS Occupation FROM OCCUPATIONS WHERE Occupation = 'Singer'
    ) AS s
) AS m;

// this didnt work either
SELECT  CASE

        WHEN Occupation = "doctor" THEN
        CONCAT("There are a total of ", dCount, " " , Occupation, "s.")
        
        WHEN Occupation = "singer" THEN
        CONCAT("There are a total of ", sCount, " " , Occupation, "s.")
        
        END
FROM (
    SELECT COUNT(Occupation) AS dCount, Lower(Occupation) AS Occupation FROM OCCUPATIONS WHERE Occupation = 'Doctor'
    UNION
    SELECT COUNT(Occupation) AS sCount, Lower(Occupation) AS Occupation FROM OCCUPATIONS WHERE Occupation = 'Singer'
) AS m;

Are you trying something like this :你在尝试这样的事情吗:

CREATE TABLE OCCUPATIONS  (
  Occupation varchar(100) );

INSERT INTO OCCUPATIONS  VALUES ('doctor'),('doctor'),
                                ('singer'),('singer'),
                                ('doctor'),('doctor'),
                                ('singer'),('singer'),
                                ('doctor'),('singer'),
                                ('singer'),('singer');




SELECT  CASE
        WHEN Occupation = "doctor" THEN
        CONCAT("There are a total of ", tbl.dCount, " " , Occupation, "s.") 
        WHEN Occupation = "singer" THEN
        CONCAT("There are a total of ", tbl.sCount, " " , Occupation, "s.")        
        END as total_count
FROM (          
SELECT COUNT(Occupation) AS dCount,null as sCount, Lower(Occupation) AS Occupation 
FROM OCCUPATIONS 
WHERE Occupation = 'doctor'
group by Occupation 
union 
SELECT null as tst, COUNT(Occupation) AS sCount, Lower(Occupation) AS Occupation 
FROM OCCUPATIONS 
WHERE Occupation = 'singer'
group by Occupation 
      )
as tbl ;

Result based on my demo would be:基于我的演示的结果将是:

total_count总数

There are a total of 5 doctors.总共有5名医生。

There are a total of 7 singers.共有7位歌手。

Demo: https://www.db-fiddle.com/f/pB6b5xrgPKCivFWcpQHsyE/28演示: https : //www.db-fiddle.com/f/pB6b5xrgPKCivFWcpQHsyE/28

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM