2

因此,我有两张桌子:

 CREATE TABLE `workers` (
  `id` int(7) NOT NULL AUTO_INCREMENT,
  `number` int(7) NOT NULL,
  `percent` int(3) NOT NULL,
  `order` int(7) NOT NULL,
      PRIMARY KEY (`id`)
 );
 CREATE `data` (
  `id` bigint(15) NOT NULL AUTO_INCREMENT,
  `workerId` int(7) NOT NULL,
  PRIMARY KEY (`id`)
 );

我想返回第一个工人(按orderASC 排序),他的表中的行数data乘以percent(来自 table workers)/100 小于number(来自 table workers.

我试过这个查询:

SELECT workers.id, COUNT(data.id) AS `countOfData`
FROM `workers` as workers, `data` as data
WHERE data.workerId = workers.id
   AND workers.percent * `countOfData` < workers.number
LIMIT 1

但我得到了错误:

#1054 - Unknown column 'countOfData' in 'where clause'
4

2 回答 2

1

这应该有效:

SELECT A.id
FROM workers A
LEFT JOIN (SELECT workerId, COUNT(*) AS Quant
            FROM data
            GROUP BY workerId) B
ON A.id = B.workerId
WHERE (COALESCE(Quant,0) * `percent`)/100 < `number`
ORDER BY `order`
LIMIT 1
于 2012-06-12T21:39:13.120 回答
0

您可以计算子查询中每个工作人员的行数。子查询可以连接到工作表。如果您使用 a left join,将考虑没有数据行的工作人员:

select  *
from    workers w
left join    
        (
        select  workerId
        ,       count(*) as cnt
        from    data
        group by
                workerId
        ) d
on      w.id = d.workerId
where   coalesce(d.cnt, 0) * w.percent / 100 < w.number
order by
        w.order
limit   1
于 2012-06-12T21:40:57.520 回答