Mysql 如何检索id';具有共同值并一起显示的?

Mysql 如何检索id';具有共同值并一起显示的?,mysql,Mysql,我是SQL的初学者。我有一个问题,我必须检索具有4个或更多普通消费者的生产者id。我想展示 制片人身份证和伯爵在一起。比如说, 我的示例数据库: -我的示例数据库 样本输出应为a和b,因为它们共同提供4个零件(21,22,23,24) 我想,我应该使用groupconcat和having,对吗 我想这会有帮助: SELECT GROUP_CONCAT(cusomer_id) FROM table GROUP BY pro_id HAVING COUNT(pro_id)>4 当您希望根据聚

我是SQL的初学者。我有一个问题,我必须检索具有4个或更多普通消费者的生产者id。我想展示 制片人身份证和伯爵在一起。比如说,

我的示例数据库: -我的示例数据库

样本输出应为a和b,因为它们共同提供4个零件(21,22,23,24)

我想,我应该使用groupconcat和having,对吗


我想这会有帮助:

SELECT GROUP_CONCAT(cusomer_id) FROM table GROUP BY pro_id HAVING COUNT(pro_id)>4
当您希望根据聚合函数(如SUM和COUNT)的结果筛选行时,HAVING是一种很好的方法。
“GROUP_CONCAT”将确保您在一列中获得所有4个结果

SELECT `producer_id`, COUNT(`consumer_id`) AS cnt
FROM orders
GROUP BY `consumer_id`
HAVING COUNT(*) > 4
我应该这样做

已更新,以获取每个生产者的消费者数量:

SELECT `producer_id`, COUNT(`consumer_id`) AS cnt
FROM orders
GROUP BY `producer_id`
HAVING COUNT(`consumer_id`) > 4
然后,单击以获得所需的结果:

SELECT tt1.producer_id, tt2.count
from (SELECT COUNT(consumer_id) as count, producer_id from ORDERS GROUP  BY producer_id HAVING COUNT(`consumer_id`) > 4) tt1
  INNER JOIN (SELECT COUNT(consumer_id) as count, producer_id from ORERS GROUP BY producer_id HAVING COUNT(`consumer_id`) > 4) tt2
     on tt1.producer_id = tt2.producer_id
WHERE tt1.count = tt2.count

测试并处理您的样本数据。

您能发布您的表结构吗?提供的示例不明确。是的,只是添加了它的图片。我是新来的:|如何找出哪些id相同。图片中是我贴错图片的最空id。对不起。现在检查一下。感谢这似乎不正确,因为它根本没有考虑到消费者。这将仅显示“a”作为结果,因为“consumerID”字段的值超过4个。是的,我没有得到任何输出bro:(我希望将输出作为一个组合,您可以在我的示例输出中看到。a和b共有4个commonOk,然后使用GROUP_CONCAT方法。这似乎不正确,因为它是根据“consumerID”列中的唯一值进行分组的。这将导致每个唯一的“consumerID”值包含6行的输出。作为结果,它肯定不会产生预期的结果集。谢谢你的评论。但是,我希望它作为一个组合,像a和b一起有4个共同点。嗨,我尝试了你的更新答案,但它显示了我的个人计数。像,a-5 b-4代码工作,第一个查询更好,集合有(计数)=4或您想要匹配的任何内容,它将显示具有该计数的所有生产者ID,您将需要类似PHP的东西来运行查询,获取结果,然后将其格式化为“a和b有4个共同点”。
create table t (p varchar(1), c int);
insert into t values('a',21);
insert into t values('a',22);
insert into t values('a',23);
insert into t values('a',24);
insert into t values('b',21);
insert into t values('b',22);
insert into t values('b',23);
insert into t values('b',24);
insert into t values('c',21);
insert into t values('c',22);
insert into t values('c',24);
insert into t values('d',22);
insert into t values('d',23);
insert into t values('d',25);
insert into t values('d',26);

// Get all the producers with at least 4 consumers,
// enumerate the consumers.
select p,
       group_concat(c order by c) g,
       count(*) c
from   t
group by p having count(*) >= 4;

+------+-------------+---+
| p    | g           | c |
+------+-------------+---+
| a    | 21,22,23,24 | 4 |
| b    | 21,22,23,24 | 4 |
| d    | 22,23,25,26 | 4 |
+------+-------------+---+

// Find common producers.
select group_concat(p) as producer,
       g as "group",
       c as count from(
  select p,
         group_concat(c order by c) g,
         count(*) c
  from   t
  group by p having count(*) >= 4
) t2 group by g having count(*) > 1;

+----------+-------------+-------+
| producer | group       | count |
+----------+-------------+-------+
| a,b      | 21,22,23,24 |     4 |
+----------+-------------+-------+