MYSQL-有count(*)而没有分组依据
我有一张MySQL表MYSQL-有count(*)而没有分组依据,mysql,group-by,Mysql,Group By,我有一张MySQL表 discount_vouchers ------------------ id email test_id 我的目标是通过以下方式列出组中使用给定电子邮件和给定测试id多次出现的所有凭单: GROUP BY email, test_id HAVING count(*) >1 如何通过以下方式阅读此组 以下是一个例子: discount_vouchers ------------------ 1 1@test.com 20 2 1@test.com
discount_vouchers
------------------
id
email
test_id
我的目标是通过以下方式列出组中使用给定电子邮件和给定测试id多次出现的所有凭单:
GROUP BY email, test_id
HAVING count(*) >1
如何通过以下方式阅读此组
以下是一个例子:
discount_vouchers
------------------
1 1@test.com 20
2 1@test.com 10
3 1@test.com 20
4 2@test.com 30
因此,我希望:
id email test_id count
1 1@test.com 20 2
2 1@test.com 10 1
3 1@test.com 20 2
4 2@test.com 30 2
试试下面的方法
SELECT C2, counter from
(SELECT C2, COUNT(*) as counter FROM test.mytable
GROUP BY C2) as aggregation
WHERE counter > 1
不使用分组方式,您可以执行以下操作
SELECT a.* ,
(SELECT count(*) FROM discount_vouchers b
WHERE a.email = b.email AND a.test_id = b.test_id) as count
FROM discount_vouchers a
这个怎么样?
使用子查询进行聚合,并使用其结果来丰富实际表:
SELECT `discount_vouchers`.*, `counts`.`count`
FROM `discount_vouchers`
INNER JOIN (SELECT `email`, `test_id`, Count(*) AS 'count'
FROM `discount_vouchers`) AS `counts`
ON `discount_vouchers`.`email` = `counts`.`email`
AND `discount_vouchers`.`test_id` = `counts`.`test_id`;
尝试此操作,通过电子邮件>1从折扣券组中选择计数*,或通过测试id>从折扣券组中选择计数*1@gamitg,这不起作用,它将更改查询的逻辑。“分组依据”有什么问题??另外,我不明白结果集与数据集之间的关系。@草莓:看起来OP希望计数结果应用于未分组数据的每一行。e、 g.获得分组结果,而不需要实际grouping@MarcB我想你是对的,但结果集目前并没有反映出这种雄心壮志。嗨,dchar,你能在这里提供更多细节吗?内部查询执行分组依据,并计算每个值出现的次数。在本例中,必须为内部查询分配别名。然后有一个对内部查询结果执行的外部查询,只选择计数器大于1的记录。事实上,这并不像预期的那样有效,我仍然只得到带有Group BY ran的C2,我需要所有C2值,而不仅仅是grouped BY。请举例说明一下?也许用小提琴,这会有帮助。group by查询应该返回所有C2值,只要它们至少存在一次。事实上,查询返回所有C2值,只要它们至少存在一次,但在我的例子中,返回的值由两个字段分组。我的目标是拥有所有凭证折扣ID,没有组BYHi Nitai,这只会返回一个结果。@Miloš-我必须承认我已经检查了查询,我不知道为什么它会失败。你能给问题添加一个测试用例,或者一个数据样本吗?我已经理解了你的要求。