簡體   English   中英

使用CASE WHEN,INNER JOIN和GROUP BY1的MySQL多重SELECT查詢

[英]MySQL multiple SELECT query with CASE WHEN, INNER JOIN and GROUP BY1

稍后,我嘗試使用內部聯接和按選項分組來構建多選查詢,但我並不真正理解為什么我的查詢不起作用(我對SQL和php不熟悉,也許就是原因)。 我收到錯誤消息,提示我的語法錯誤。

我有多個具有相同結構的表,並且希望在一個查詢中將某些情況按一個公共變量分組。

查詢是這樣的:

SELECT
    (SELECT Var1, 
    MAX( CASE WHEN Var2 ='2015' AND Var3='A1_U18' THEN Var4 ELSE 0 END ) AS 'A1_U18_0',
    MAX( CASE WHEN Var2 ='2015' AND Var3='A31_U6' THEN Var4 ELSE 0 END ) AS 'A31_U6_0'
    FROM table_a) AS a,

    (SELECT Var1,
    MAX( CASE WHEN Var2 ='2015' AND Var3='B21_U3' THEN Var4 ELSE 0 END ) AS 'B21_U3_0',
    MAX( CASE WHEN Var2 ='2015' AND Var3='B21_U6' THEN Var4 ELSE 0 END ) AS 'B21_U6_0'
    FROM table_b) AS b,

    (SELECT Var1,
    MAX( CASE WHEN Var2 ='2015' AND Var3='C21_U3' THEN Var4 ELSE 0 END ) AS 'C21_U3_0',
    MAX( CASE WHEN Var2 ='2015' AND Var3='C21_U6' THEN Var4 ELSE 0 END ) AS 'C21_U6_0'
    FROM table_c) AS c

INNER JOIN a b
    ON a.Var1 = b.Var1
INNER JOIN a c
    ON a.Var1 = c.Var1

GROUP BY a.Var1

我究竟做錯了什么?

  1. 您的子查詢無法返回多個字段
  2. 你錯過了包括FROM a
  3. 要聲明別名,您需要使用反引號'`',您要使用單引號' ,這是針對字符串的。

我強烈建議您做一個基本的mySql教程, 這對您有很大幫助

但是您可能需要這樣的東西。

SELECT a.*, 
       b.`B21_U3_0`, b.`B21_U6_0`,
       c.`C21_U3_0`, c.`C21_U6_0`

FROM 
    (SELECT Var1, 
            MAX( CASE WHEN Var2 ='2015' AND Var3='A1_U18' 
                      THEN Var4 ELSE 0 END ) AS `A1_U18_0`,
            MAX( CASE WHEN Var2 ='2015' AND Var3='A31_U6' 
                      THEN Var4 ELSE 0 END ) AS `A31_U6_0`
     FROM table_a
     GROUP BY Var1
    ) AS a
JOIN    
    (SELECT Var1,
            MAX( CASE WHEN Var2 ='2015' AND Var3='B21_U3' 
                      THEN Var4 ELSE 0 END ) AS `B21_U3_0`,
            MAX( CASE WHEN Var2 ='2015' AND Var3='B21_U6' 
                      THEN Var4 ELSE 0 END ) AS `B21_U6_0`
     FROM table_b
     GROUP BY Var1 
    ) AS b
  ON a.Var1 = b.Var1
JOIN   
    (SELECT Var1,
           MAX( CASE WHEN Var2 ='2015' AND Var3='C21_U3' 
                     THEN Var4 ELSE 0 END ) AS `C21_U3_0`,
           MAX( CASE WHEN Var2 ='2015' AND Var3='C21_U6' 
                     THEN Var4 ELSE 0 END ) AS `C21_U6_0`
     FROM table_c
     GROUP BY Var1
    ) AS c
ON a.Var1 = c.Var1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM