![](/img/trans.png)
[英]MySQL select rows with two where conditions and count greater than 1 with same column ID
[英]MySQL count rows where column value is same and select them where count is greater than 2
我正在处理一个我必须回溯的问题,因为整个项目已经投入生产并且系统已经使用了一段时间。
我需要使用以下参数回溯所有数据。
Select * from table where bundle = 5 and count(bundle) >= 3
这将是一个连接表,因此从技术上讲,我需要具有相同事务的包数大于 2。
例如
id | transaction | bundle
-------------------------
1 | 123 | 5
3 | 234 | 15
12 | 1111 | 5
13 | 1111 | 15
17 | 1111 | 5
18 | 1111 | 5
到目前为止我的代码
select * from table_i as ti
right join table_r as tr
on tr.id = ti.t_id
where ti.type_id = x and ti.bundle = 5 and ti.online = 1 and count(ti.bundle) >=5
谢谢
SELECT ti.*, tr.*
FROM ticket_items AS ti
INNER join transactions as tr
ON tr.id = ti.trans_id
INNER JOIN
(
SELECT tis.trans_id, COUNT(tis.bundle) AS bundle_count
FROM ticket_items as tis
INNER join transactions as trs
ON trs.id = tis.trans_id
WHERE tis.type_id = 2
AND tis.bundle = 5
AND tis.online = 1
HAVING bundle_count > 2
) sub0
ON sub0.trans_id = ti.trans_id
WHERE ti.type_id = 2
AND ti.bundle = 5
AND ti.online = 1
结果: 1328 1 1 766 2 5 25 1 1 2015-10-26 20:26:41 2015-10-27 00:00:02 0 766 1 0 John Doe 123-123-1234 NULL email@email.com NULL NULL NULL NULL 1 164 Cedar Square NULL 123 rrt city province country 125 2015-10-26 20:26:41 2015-10-26 20:26:41 125.00 0.00 0.00 0.00 0 1
表ticket_items:
id | lot | system | trans_id | type | bundle | price | print | online | date | update | void
1 1 2 1 1 1 100 1 0 2015-10-01 23:30:12 2015-10-03 18:49:25 0
2 1 2 1 2 15 50 1 0 2015-10-01 23:30:12 2015-10-03 16:48:15 0
3 1 3 2 1 1 100 1 0 2015-10-02 00:13:57 2015-10-02 00:22:17 1
4 1 3 2 2 15 50 1 0 2015-10-02 00:13:57 2015-10-02 00:19:17 1
表交易:
id | lot_id | cust | first | last| number |||||||
1 | 1 | 23 | john | doe | 123
我对你问题的措辞有点困惑,但试试这个:
SELECT ti.id, ti.transaction, count(ti.bundle)
FROM table_i as ti
JOIN table_r as tr
ON tr.id = ti.id
WHERE ti.type_id = x
AND ti.bundle = 5
AND ti.online = 1
AND count(ti.bundle) >=5
我认为你需要使用having
。 像这样的东西:
select ti.*, count(ti.bundle) from table_i as ti
right join table_r as tr
on tr.id = ti.t_id
where ti.type_id = x and ti.bundle = 5 and ti.online = 1
group by ti.bundle
having count(ti.bundle) >=5; /* or >= 3 depending on which you're using now*/
如果我理解正确,您想找到超过 3 个的交易,其中交易代码为 5 个且 online = 1,然后从 2 个表中带回该交易的所有行,交易量为 5和在线 = 1
如果是这样,子查询以获取计数超过 3 的事务,然后将其连接回 2 个表:-
SELECT ti.*, tr.*
FROM table_i AS ti
INNER join table_r as tr
ON tr.id = ti.t_id
INNER JOIN
(
SELECT tis.transaction, COUNT(tis.bundle) AS bundle_count
FROM table_i as tis
INNER join table_r as trs
ON trs.id = tis.t_id
WHERE tis.type_id = x
AND tis.bundle = 5
AND tis.online = 1
GROUP BY tis.transaction
HAVING bundle_count >= 3
) sub0
ON sub0.transaction = ti.transaction
WHERE ti.type_id = x
AND ti.bundle = 5
AND ti.online = 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.