1

MySQL テーブルからいくつかの統計を取得しようとしていますが、それを単一のクエリに保持したいと考えています。方法がわからないだけです(またはそれが可能かどうかもわかりません)。次の 2 つのクエリがあります。

SELECT COUNT(*) AS `accept` 
FROM `status` 
WHERE `groupID` IN (98779,98780) 
  AND `group` = 'order' 
  AND `status` = 'accept'

SELECT COUNT(*) AS `price` 
FROM `status` 
WHERE `groupID` IN (98779, 98780) 
  AND `group` = 'quotation' 
  AND (`status` = 'final' OR `status` = 'manualprice')

私の最善の提案は、次のSELECTようにそれらを 1 つに結合することです。

SELECT
    (SELECT COUNT(*) AS `accept` 
     FROM `status`
     WHERE `groupID` IN (98779, 98780) AND `group` = 'order' AND `status` = 'accept') AS accept,
    (SELECT COUNT(*) AS `price` 
     FROM `status` 
     WHERE `groupID` IN (98779, 98780) AND `group` = 'quotation' AND (`status` = 'final' OR `status` = 'manualprice')) AS price

より良い方法はありますか?

4

2 に答える 2

1

これを行う別の方法があります。

SELECT  SUM(`group` = 'order' AND `status` = 'accept') AS `ACCEPT`,
        SUM(`group` = 'quotation' AND (`status` = 'final' OR `status` = 'manualprice')) AS `PRICE`
FROM    `status`
WHERE   `groupID` IN (98779, 98780) AND
        `group` IN ('order', 'quotation') AND
        `status` IN ('accept', 'final', 'manualprice')
于 2013-08-16T12:06:03.510 に答える
0
SELECT 
    sum(if(`group` = 'order' AND `status` = 'accept', 1,0)) as `accept`,
    sum(if(`group` = 'quotation' AND (`status` = 'final' OR `status` = 'manualprice'), 1,0)) as `price`
FROM 
    `status` 
WHERE 
    `groupID` IN (98779,98780) 
    AND `group` IN ('order', 'quotation') 
    AND `status` IN ('accept', 'final', 'manualprice')

編集これは基本的に491243による他の回答と同じです。追加のifステートメントを使用しましたが、必ずしも必要ではないようです。

于 2013-08-16T12:09:44.123 に答える