0

私はこのようなテーブルを持っています:

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

。。。

次のような1つのクエリで、雨の月曜日と晴れの月曜日の数を取得したい

day     rainy_d  sunny_d
Monday  2        5

MysqlとPostgreSQLでそれを達成する方法は?

4

3 に答える 3

1
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`
于 2012-05-22T17:46:46.473 に答える
1

標準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
于 2012-05-22T17:47:37.893 に答える
0

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()構成は、列内の2つの異なる(null以外の)値に対して機能し、weather標準のSQLです。その他の値については、@Markおよび@xQbertによって提供される代替を使用してください。

于 2012-05-22T23:58:53.753 に答える