子查询返回超过1行,如%..%

时间:2018-01-05 18:13:53

标签: mysql sql

我正在使用银行交易表,从1月到10月为大约800个客户包含67000笔交易所以我想要的是计算每个客户每月的交易数量我希望最终结果将像cust_id,交易数量对于jan,2月到10月的交易次数我尝试了这个查询

 SELECT 
    cut_id,
    CASE WHEN tra_date LIKE '%Oct%' 
        THEN 
            (select count(tra_date) from tab where tra_date like '%Oct%' GROUP by cut_id)
        ELSE 0 
    END AS oct,
    CASE WHEN tra_date LIKE '%Sep%' 
        THEN 
            (select count(tra_date) from tab where tra_date like '%Sep%' GROUP by cut_id)
        ELSE 0 
    END AS sept 
    FROM tab 
    GROUP by cut_id 

但我发现此错误#1242 - 子查询返回超过1行

2 个答案:

答案 0 :(得分:0)

在本节中

 (select count(tra_date) from tab where tra_date like '%Oct%' GROUP by cut_id)

如果您使用count执行group by,并且您要分组的内容有多个值,则会获得多个值。根据您的要求,您需要选择所需的单个值。

也许你需要这样做

 (select count(tra_date) from tab t1 where t1.tra_date like '%Oct%' and t1.cut_id = tab.cut_id) 

答案 1 :(得分:0)

我假设你有一个理智的架构,它使用实际的日期时间类型作为交易日期,而不是明显的疯狂架构。使用字符串的问题。鉴于此,您的查询将如下所示:

SELECT 
    cut_id, 
    SUM(CASE WHEN month(tra_date) = 10 THEN 1 ELSE 0 END) AS Oct,
    SUM(CASE WHEN month(tra_date) = 9 THEN 1 ELSE 0 END) AS Sept
FROM tab 
GROUP by cut_id 
相关问题