mysql - 将对同一张表的查询合并为一个查询

标签 mysql optimization

我正在尝试从我的 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

有没有更好的办法?

最佳答案

还有另一种方法,

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')

关于mysql - 将对同一张表的查询合并为一个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18272896/

相关文章:

mysql - MySQL docker compose后,SQL脚本执行不起作用

asp.net - 从 ASP.Net 连接到 mySQL 数据库 (vb)

java - 我如何在mysql中存储图像?

mysql - 计算表中的行数

python - 一旦我们的数据库变得太慢,我该如何创建按需报告?

python - scipy.optimize.fmin 和 scipy.optimize.minimize 之间的区别

c - avr-gcc:没有找到任何调用堆栈帧的符号

javascript - 这段 JavaScript 代码可以清理吗?

mysql - GORM 是否存在以最大前缀开头的字段问题或 Float 字段存在问题

performance - 在 Nopcommerce 上构建的电子商务网站在多个主机名上从 CDN 加载图像的挑战