Mysql 想要获取所有日期,但如果有一个或多个TDBUY=1,则此date@TDBUY=0不是

Mysql 想要获取所有日期,但如果有一个或多个TDBUY=1,则此date@TDBUY=0不是,mysql,Mysql,我有一个表,其中有一个日期列和一个名为TDBUY的列(可以是0或1)。现在我做以下几点: SELECT tradedate,aktienstat.TDBuyPerfection,count(*) as cc from aktienstat group by TradeDate,TDBuyPerfection HAVING cc >= '0' ORDER BY TradeDate desc limit 100; 并获得: 我不想显示2018-02-08

我有一个表,其中有一个日期列和一个名为TDBUY的列(可以是0或1)。现在我做以下几点:

     SELECT tradedate,aktienstat.TDBuyPerfection,count(*) as cc from
     aktienstat   group by TradeDate,TDBuyPerfection  HAVING cc >= '0' ORDER
     BY TradeDate desc limit 100;
并获得:

我不想显示2018-02-08或2018-02-07的f.e.计数为0(第1行和第3行),因为有1个计数,每个计数为1。但如果没有TDBUY,则日期应显示为0计数

这里有人能告诉我怎么做吗? 谢谢

编辑:它也适用于总和而不是计数

     SELECT tradedate,aktienstat.TDBuyPerfection,sum(aktienstat.TDBuyPerfection) as summe from
 aktienstat   group by TradeDate ORDER
 BY TradeDate desc limit 100;´

我们可以尝试通过pivot查询执行此操作:

SELECT
    tradedate,
    CASE WHEN cnt_1 = 0 THEN 0 ELSE 1 END AS TDBuyPerfection,
    CASE WHEN cnt_1 = 0 THEN cnt_0 ELSE cnt_1 END AS cnt
FROM
(
    SELECT
        tradedate,
        COUNT(CASE WHEN TDBuyPerfection = 0 THEN 1 END) AS cnt_0,
        COUNT(CASE WHEN TDBuyPerfection = 1 THEN 1 END) AS cnt_1
    FROM aktienstat
    GROUP BY tradedate
) t;
pivot技巧在这里起作用,因为它将0和1计数带入单个记录。在那里,测试这两个计数相对容易。在你目前的状态下,检查计数要困难得多

下面的演示显示零购买日期仅显示零计数,而具有购买计数的日期仅显示购买数据


或者我使用sum()而不是count(),就像我的编辑一样question@WalterSchrabmair是的,您可以这样做,但请记住,这种语法实际上只会在MySQL上运行,而不会在大多数其他数据库上运行。实际上,我使用的计数表达式比用SUM表示的相同逻辑要短,因为在前一种情况下,我们可以避免ELSE条件。谢谢你的评论。您的解决方案非常复杂!:)