簡體   English   中英

是否可以在子查詢中返回多於一行

[英]Is it possible to return more then one row in sub-query

我的查詢

SELECT c.COLUMN_A,
(select count(b.COLUMN_B) from SAME_TABLE_NAME b where COLUMN_B='X' GROUP by   COLUMN_A) as ALIAS_NAME 

來自 SAME_TABLE_NAME c

上面的查詢拋出錯誤為

單行子查詢返回多於一行。

但我需要它返回的所有行

嘗試:

    SELECT COLUMN_A, COUNT(COLUMN_B)  AS ALIAS_NAME 
      FROM SAME_TABLE_NAME 
      WHERE COLUMN_B='X' GROUP BY COLUMN_A

如果這不對,請發布您的真實架構和數據示例。

你在你的列中得到多個結果。 你正在尋找這樣的東西。

select  COLUMN_A, count(b.COLUMN_B) from SAME_TABLE_NAME b 
            where COLUMN_B='X' GROUP by COLUMN_A

你可以試試這個。

SELECT c.COLUMN_A,
(select count(b.COLUMN_B) from SAME_TABLE_NAME b 
 where COLUMN_B='X' 
 AND C.COLUMN_A=B.COLUMN_A   --- THIS WHERE CLAUSE IS ADDED TO MAP ALL YOUR COUNT RECORD WITH ITS RESPECTED COLUMN
 GROUP by B.COLUMN_A) as ALIAS_NAME 
FROM SAME_TABLE_NAME c

標量子查詢最多應返回一行。 因此, GROUP BY恰當的。 如果您想使用子查詢來表達這一點,您需要一個沒有GROUP BY的相關子查詢:

SELECT c.COLUMN_A,
       (SELECT count(b.COLUMN_B) 
        FROM SAME_TABLE_NAME b 
        WHERE c.COLUMN_A = b.COLUMN_A AND
              b.COLUMN_B = 'X' 
       ) as ALIAS_NAME 
FROM SAME_TABLE_NAME c;

然而,更好的方法是使用窗口函數,在更新的 MySQL 版本中可用:

SELECT c.COLUMN_A,
       SUM(c.COLUMN_B = 'X') OVER (PARTITION BY c.COLUMN_A) as ALIAS_NAME 
FROM SAME_TABLE_NAME c;

請注意,您應該限定所有列引用。 對於子查詢尤其如此,其中的范圍規則有時可能不會按照您的意圖執行。

暫無
暫無

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

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