mysql在where子句中使用逻辑+组函数的使用无效

mysql在where子句中使用逻辑+组函数的使用无效,mysql,sql,logic,where,Mysql,Sql,Logic,Where,我有下面的mysql查询,输出下图: select v.invoicenumber, v.invoicedate, v.haulier, v.transporttype, count(v.loadnumber) as totalloads, sum(v.cost) as totalcost, concat(SUM(if(invoiceapproved = 'yes', 1, 0)),' / ',count(v.loadnumber)) AS count, SUM(

我有下面的mysql查询,输出下图:

select
  v.invoicenumber,
  v.invoicedate,
  v.haulier,
  v.transporttype,
  count(v.loadnumber) as totalloads,
  sum(v.cost) as totalcost, 
  concat(SUM(if(invoiceapproved = 'yes', 1, 0)),' / ',count(v.loadnumber)) AS count,  SUM(if(invoiceapproved = 'yes', 1, 0)) as approved
from v2loads v  
  where v.invoiced='yes'   
  group by invoicenumber
此查询执行100%

我要做的是过滤掉计数为100%的任何行/数据。在示例输出中,我想过滤掉发票16,因为它是2/2和100%。那么在哪里呢

 count(v.loadnumber) <> SUM(if(invoiceapproved = 'yes', 1, 0))
如果我将此逻辑添加到where子句中,它将失败,错误为group函数的使用无效。所以下面的代码不起作用:

select v.invoicenumber,
  v.invoicedate,
  v.haulier,
  v.transporttype,
  count(v.loadnumber) as totalloads,
  sum(v.cost) as totalcost, 
  concat(SUM(if(invoiceapproved = 'yes', 1, 0)),' / ',count(v.loadnumber)) AS count, 
  SUM(if(invoiceapproved = 'yes', 1, 0)) as approved 
from v2loads v  
  where v.invoiced='yes' and 
  (count(v.loadnumber))<>(SUM(if(invoiceapproved = 'yes', 1, 0)))  
  group by invoicenumber
我得到了以下错误:

错误为1111-组函数的使用无效

任何建议都将一如既往地受到欢迎。

您可以这样做:

SELECT 
  *,
  CONCAT(approved, ' / ', totalloads) AS count, 
FROM
(
    SELECT
      v.invoicenumber,
      v.invoicedate,
      v.haulier,
      v.transporttype,
      COUNT(v.loadnumber)                    AS totalloads,
      SUM(v.cost)                            AS totalcost, 
      SUM(if(invoiceapproved = 'yes', 1, 0)) As approved 
    FROM v2loads v  
    WHERE v.invoiced='yes'
    GROUP BY invoicenumber
) t
WHERE totalloads <> approved;
您可以这样做:

SELECT 
  *,
  CONCAT(approved, ' / ', totalloads) AS count, 
FROM
(
    SELECT
      v.invoicenumber,
      v.invoicedate,
      v.haulier,
      v.transporttype,
      COUNT(v.loadnumber)                    AS totalloads,
      SUM(v.cost)                            AS totalcost, 
      SUM(if(invoiceapproved = 'yes', 1, 0)) As approved 
    FROM v2loads v  
    WHERE v.invoiced='yes'
    GROUP BY invoicenumber
) t
WHERE totalloads <> approved;

太棒了,是的,你是对的,从来没有想过筑巢。谢谢马哈茂德。太棒了,是的,你是对的,从没想过要筑巢。谢谢你,马哈茂德。