【问题标题】:Row count where column1='value1' and column1='value2' group by column2column1='value1' 和 column1='value2' 按 column2 分组的行数
【发布时间】:2012-05-29 05:58:43
【问题描述】:

我有一张这样的桌子:

date         day     weather
2000-01-01   Monday  Sunny
2000-01-02   Tuesday Rainy

。 . .

我想在一个查询中获得下雨的星期一和晴天的次数,例如

day     rainy_d  sunny_d
Monday  2        5

如何在 Mysql 和 PostgreSQL 中做到这一点?

【问题讨论】:

    标签: mysql postgresql count group-by


    【解决方案1】:

    day 列可能是多余的。我会删除它而不替换。 date 列包含所有信息。那么您的查询可能如下所示..

    在 PostgreSQL 中:

    SELECT to_char(date, 'Day') AS day
          ,COUNT(NULLIF(weather,'Sunny')) AS rainy_d
          ,COUNT(NULLIF(weather,'Rainy')) AS sunny_d
    FROM   tbl
    GROUP  BY 1;
    

    在 MySQL 中:

    SELECT DAYNAME(date) AS day
    ... rest identical
    

    NULLIF() 构造仅适用于 weather 列中的两个不同(非空)值,并且是标准 SQL。如需更多值,请使用@Mark 和@xQbert 提供的替代方法。

    【讨论】:

      【解决方案2】:

      标准 SQL,两者都适用:

      SELECT
          day,
          SUM(CASE WHEN weather = 'Rainy' THEN 1 ELSE 0 END) AS rainy_d,
          SUM(CASE WHEN weather = 'Sunny' THEN 1 ELSE 0 END) AS sunny_d
      FROM yourtable
      GROUP BY day
      

      更简洁的版本 - 仅限 MySQL:

      SELECT
          day,
          SUM(weather = 'Rainy') AS rainy_d,
          SUM(weather = 'Sunny') AS sunny_d
      FROM yourtable
      GROUP BY day
      

      更简洁的版本 - 仅限 PostgreSQL:

      SELECT
          day,
          SUM((weather = 'Rainy')::int) AS rainy_d,
          SUM((weather = 'Sunny')::int) AS sunny_d
      FROM yourtable
      GROUP BY day
      

      【讨论】:

        【解决方案3】:
        select `Day`, 
        SUM(case when weather = 'Sunny' THEN 1 ELSE 0 end) as Sunny_D,
        SUM(case when weather = 'Rainy' THEN 1 ELSE 0 end) as Rainy_D
        FROM YOURTABLENAME
        Where day = 'Monday'
        Group by `Day`
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-14
          • 2018-02-20
          • 1970-01-01
          • 1970-01-01
          • 2014-07-11
          • 2015-05-05
          相关资源
          最近更新 更多