1

次のようなテーブルがあります。

    CREATE TABLE IF NOT EXISTS `server_orders` (
  `id` int(20) unsigned NOT NULL AUTO_INCREMENT,
  `group_order_id` varchar(200) NOT NULL,
  `status` int(11) NOT NULL,     
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 ;

値付き

INSERT INTO `server_orders` (`id`, `group_order_id`, `status`) VALUES
(1, '1', '1'),
 (2, '2', '50'),
 (3, '2', '100'),
 (4, '2', '1'),
 (5, '3', '100'),
 (6, '3', '100'),
 (7, '4', '1'),

;

同じグループIDを持つすべての行のステータスが100の場合にのみ、ステータス100のすべてを選択したいので、この場合、group_order_id 3のID 5と6になります

4

1 に答える 1

1

COUNTこのようなものは、 withを使用して動作するはずCASEです:

select * 
from server_orders
where group_order_id in (
  select group_order_id
  from server_orders
  group by group_order_id
  having count(id) = count(case when status = 100 then 1 end)
  )

各 group_order_id のすべてのレコードの数を、ステータスが 100 のときの数と比較することによって機能します。

于 2013-05-27T00:57:00.183 に答える