[英]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.