0

編集:テーブルを変更しました。更新された表を参照してください:

私のサンプルテーブルでは

post            status      
-------------   -------------
post1           delivered
post2           undelivered
post3           delayed
post4           delivered
post5           undelivered

deliveredの数とundelivered+の数をdelayed1 つのクエリで組み合わせて取得することはできますか?

このような:

post            status      
-------------   -------------
delivered       2
undelivered     3
4

4 に答える 4

2
SELECT
    SUM(IF(status = 'delivered', 1, 0)) as `delivered_count`,
    COUNT(postid) as `all_count`
FROM
    table

うまくいくはずです。このアカウントには存在deliveredundeliveredステータスしかありません。他にもあるが、これら 2 つだけをカウントしたい場合は、次のようにします。

SELECT
    SUM(IF(status = 'delivered', 1, 0)) as `delivered_count`,
    SUM(IF(status = 'delivered' OR status = 'undelivered', 1, 0)) as `all_count`
FROM
    table

必要に応じて個別にカウントする場合deliveredundelivered、次を使用できますGROUP BY

SELECT
    COUNT(postid),
    status
FROM
    table
WHERE
    status IN ('delivered', 'undelivered')
GROUP BY
    status
于 2013-07-28T18:51:00.903 に答える
0
SELECT COUNT(*)
FROM table
GROUP BY status = 'delivered'
ORDER BY status = 'delivered' DESC

これにより、

count of delivered
count of everything else
于 2013-07-28T18:50:25.810 に答える
0

deliveredundelivered、およびdelayedのみが使用可能なステータスであると仮定すると、

SELECT  SUM(CASE WHEN status = 'delivered' THEN 1 END) `delivered`,
        SUM(CASE WHEN status <> 'delivered' THEN 1 END) `delayed + undelivered`
FROM    tableName

出力

╔═══════════╦═══════════════════════╗
║ DELIVERED ║ DELAYED + UNDELIVERED ║
╠═══════════╬═══════════════════════╣
║         2 ║                     3 ║
╚═══════════╩═══════════════════════╝

編集に基づいて、複数の行が必要です。

SELECT  CASE WHEN status = 'delivered' THEN 'delivered'
                  ELSE 'undelivered'
        END post,
        COUNT(*) totalCount
FROM    tableName
GROUP   BY CASE WHEN status = 'delivered' THEN 'delivered'
                  ELSE 'undelivered'
           END

出力

╔═════════════╦════════════╗
║    POST     ║ TOTALCOUNT ║
╠═════════════╬════════════╣
║ delivered   ║          2 ║
║ undelivered ║          3 ║
╚═════════════╩════════════╝
于 2013-07-28T18:51:20.817 に答える
0

ステータスが 3 つしかなく、配送されたアイテムの数を含む 1 つの行と、配送されていない + 遅延したアイテムの数を含む 1 つの行が必要な場合は、次のクエリを使用できます。

SELECT
  CASE WHEN status = 'delivered' THEN status
       ELSE 'undelivered+delayed' END status,
  COUNT(*) cnt
FROM
  yourtable
GROUP BY
  CASE WHEN status = 'delivered' THEN status
       ELSE 'undelivered+delayed' END
于 2013-07-28T18:51:26.730 に答える