我正在尝试从我的MySQL表中获取一些统计信息,并希望将其保留为单个查询。只是不知道如何(或者甚至可能)。我有这两个问题:
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
,如下所示:
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
有更好的方法吗?
答案 0 :(得分: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')
答案 1 :(得分: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语句,看似不一定需要。