MySQL 使用having 和where 子句

标签 mysql

难以返回期望的结果。

这是我的查询:

SELECT
    DATABASE()AS INVOICES_Range_$0,
    count(
        DISTINCT invoice_lines.invoice_header_id
    )AS 'Invoice Header Count',
    sum(invoice_lines.accounting_total)AS 'Dollar_Value',
    100 * COUNT(
        DISTINCT invoice_lines.invoice_header_id
    )/(
        SELECT
            COUNT(
                DISTINCT invoice_lines.invoice_header_id
            )
        FROM
            invoice_lines
        WHERE
            (
                invoice_lines. STATUS NOT LIKE '%new%'
            )
        AND(
            invoice_lines. STATUS NOT LIKE '%voided%'
        )
    )AS 'Percent of All Invoices',
    COUNT(approvals.approvable_id)/ count(
        DISTINCT invoice_lines.invoice_header_id
    )AS 'AVG_APPROVALS'
FROM
    invoice_lines
LEFT JOIN approvals ON invoice_lines.invoice_header_id = approvals.approvable_id
WHERE
    (
        invoice_lines.accounting_total = 0
    )
AND(
    invoice_lines. STATUS NOT LIKE '%new%'
)
AND(
    invoice_lines. STATUS NOT LIKE '%voided%'
);

此查询返回任何发票行值为 $0 的结果。

作为引用,我们可能有一张发票,其中一行是 0 美元,但其他行总计 600 美元。

我只想在上面的查询中包含所有发票行总计等于 0 美元的情况。

我已经尝试过:

    SELECT
    DATABASE()AS INVOICES_Range_$0,
    count(
        DISTINCT invoice_lines.invoice_header_id
    )AS 'Invoice Header Count',
    sum(invoice_lines.accounting_total)AS 'Dollar_Value',
    100 * COUNT(
        DISTINCT invoice_lines.invoice_header_id
    )/(
        SELECT
            COUNT(
                DISTINCT invoice_lines.invoice_header_id
            )
        FROM
            invoice_lines
        WHERE
            (
                invoice_lines. STATUS NOT LIKE '%new%'
            )
        AND(
            invoice_lines. STATUS NOT LIKE '%voided%'
        )
    )AS 'Percent of All Invoices',
    COUNT(approvals.approvable_id)/ count(
        DISTINCT invoice_lines.invoice_header_id
    )AS 'AVG_APPROVALS'
FROM
    invoice_lines
LEFT JOIN approvals ON invoice_lines.invoice_header_id = approvals.approvable_id
WHERE
    (
        invoice_lines. STATUS NOT LIKE '%new%'
    )
AND(
    invoice_lines. STATUS NOT LIKE '%voided%'
)
HAVING
    SUM(
        invoice_lines.accounting_total = 0
    );

但是,这会返回相同的结果。另外,当修改为

HAVING (SUM(invoice_lines.accounting_total) < 500 )

它返回所有发票和总金额。

任何帮助将不胜感激,因为我无法确定将结果限制为那些invoice_header_id以仅计算所有行总和等于0的那些发票的正确方法。

最佳答案

HAVING
    SUM(
        invoice_lines.accounting_total = 0
    );

可能想成为

HAVING
    SUM(
        invoice_lines.accounting_total
    )  = 0

关于MySQL 使用having 和where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36135862/

相关文章:

php - 如何在 CI 中的非对象上获取 num_rows()

mysql - jdbc转MYSQL错误: "table airportdetails doesn' t exist"

mysql - 左连接使用 3 个表的嵌套 select 语句

java - Json 问号 ("??????") 而不是希伯来字符

php - 获取行,其中天等于某个值

从 4.1 升级到 MySQL 5.5 后,Php-MySQL UPDATE & INSERT 停止工作

mysql - SQL 查询从同一列中选择多个值

php - 数据未存储在数据库中 [Laravel 5.5]

mysql - SQL选择两列组合的最高行

mysql - AUTO_INCREMENT 在 MySql 更新