2

したがって、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`)
 );

テーブル時間(テーブルから)/ 100の行数が(テーブルから)より少ない最初のワーカー( orderASCによる順序)を返したい。datapercentworkersnumberworkers

私はこのクエリを試しました:

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

サブクエリでワーカーあたりの行数を計算できます。サブクエリはワーカーテーブルに結合できます。を使用する場合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 に答える