mysql 也使用 WHERE 按天排序
mysql sorting by day with WHERE also
我有一个名为 logs 的 table,它有一个日期字段以及一个名为 success 的列,它是一个 tinyint(0),如果它是 1,则表示它成功,但如果它是 0,则它表示它失败了。
我试图将我的日志分解成每天的总数,所以我想计算出每天有多少成功,有多少失败。
我有以下查询:
SELECT DAY( DATE ) ,
COUNT( * ) FROM logs
WHERE DATE BETWEEN STR_TO_DATE('2015-03-01','%Y-%m-%d' ) AND NOW()
GROUP BY DAY( DATE )
这会返回这样的总数:
array(2) { ["DAY( DATE )"]=> string(2) "18" ["COUNT( * )"]=> string(3)
"339" }
array(2) { ["DAY( DATE )"]=> string(2) "20" ["COUNT( * )"]=> string(3) "161" }
array(2) { ["DAY( DATE )"]=> string(2) "21" ["COUNT( * )"]=> string(2) "49" }
array(2) { ["DAY( DATE )"]=> string(2) "22" ["COUNT( * )"]=> string(2) "72" }
所以它显示了每天的总数,但是我也希望能够从 "success" 列中获得成功和失败的总数。这是否可能在同一个查询中,或者我是否需要 运行 另一个带有 WHERE success=0
和 success=1
的查询来获取该信息?
您可以在 SUM
:
中使用 CASE
SELECT DAY( DATE )
, COUNT( * ) AS total_count
, SUM(CASE WHEN success = 0 THEN 1 ELSE 0 END) AS failed_count
, SUM(CASE WHEN success = 1 THEN 1 ELSE 0 END) AS succeeded_count
FROM logs
WHERE DATE BETWEEN STR_TO_DATE('2015-03-01','%Y-%m-%d' ) AND NOW()
GROUP BY DAY( DATE )
您可以使用条件总和作为
SELECT DAY( DATE ) ,
sum(success = 1) as `success`,
sum(success = 0) as failure,
COUNT( * ) FROM logs
WHERE DATE BETWEEN STR_TO_DATE('2015-03-01','%Y-%m-%d' ) AND NOW()
GROUP BY DAY( DATE )
我有一个名为 logs 的 table,它有一个日期字段以及一个名为 success 的列,它是一个 tinyint(0),如果它是 1,则表示它成功,但如果它是 0,则它表示它失败了。
我试图将我的日志分解成每天的总数,所以我想计算出每天有多少成功,有多少失败。
我有以下查询:
SELECT DAY( DATE ) ,
COUNT( * ) FROM logs
WHERE DATE BETWEEN STR_TO_DATE('2015-03-01','%Y-%m-%d' ) AND NOW()
GROUP BY DAY( DATE )
这会返回这样的总数:
array(2) { ["DAY( DATE )"]=> string(2) "18" ["COUNT( * )"]=> string(3)
"339" }
array(2) { ["DAY( DATE )"]=> string(2) "20" ["COUNT( * )"]=> string(3) "161" }
array(2) { ["DAY( DATE )"]=> string(2) "21" ["COUNT( * )"]=> string(2) "49" }
array(2) { ["DAY( DATE )"]=> string(2) "22" ["COUNT( * )"]=> string(2) "72" }
所以它显示了每天的总数,但是我也希望能够从 "success" 列中获得成功和失败的总数。这是否可能在同一个查询中,或者我是否需要 运行 另一个带有 WHERE success=0
和 success=1
的查询来获取该信息?
您可以在 SUM
:
CASE
SELECT DAY( DATE )
, COUNT( * ) AS total_count
, SUM(CASE WHEN success = 0 THEN 1 ELSE 0 END) AS failed_count
, SUM(CASE WHEN success = 1 THEN 1 ELSE 0 END) AS succeeded_count
FROM logs
WHERE DATE BETWEEN STR_TO_DATE('2015-03-01','%Y-%m-%d' ) AND NOW()
GROUP BY DAY( DATE )
您可以使用条件总和作为
SELECT DAY( DATE ) ,
sum(success = 1) as `success`,
sum(success = 0) as failure,
COUNT( * ) FROM logs
WHERE DATE BETWEEN STR_TO_DATE('2015-03-01','%Y-%m-%d' ) AND NOW()
GROUP BY DAY( DATE )