Mysql 在where子句中查找第一个
我在这里搜索过,也许我不知道写问题的确切方式,但找不到答案 我需要从click_stats中找到所有用户的积分总和,其中source='reward',这些用户至少声明了3个促销代码中的一个,并且显示了总点击次数。有很多比3,但简化了我需要努力满足张贴标准 表:Mysql 在where子句中查找第一个,mysql,Mysql,我在这里搜索过,也许我不知道写问题的确切方式,但找不到答案 我需要从click_stats中找到所有用户的积分总和,其中source='reward',这些用户至少声明了3个促销代码中的一个,并且显示了总点击次数。有很多比3,但简化了我需要努力满足张贴标准 表: +---------------------------------------------+ | click_stats | +----+---------+------
+---------------------------------------------+
| click_stats |
+----+---------+--------+--------+------------+
| ID | Credits | Userid | Source | Clicked |
+----+---------+--------+--------+------------+
| 1 | 10 | jon | reward | 1602216005 |
+----+---------+--------+--------+------------+
| 2 | 5 | bob | reward | 1602216504 |
+----+---------+--------+--------+------------+
| 3 | 5 | jon | reward | 1602216137 |
+----+---------+--------+--------+------------+
| 4 | 5 | bob | reward | 1602216138 |
+----+---------+--------+--------+------------+
| 5 | 10 | jon | reward | 1602216139 |
+----+---------+--------+--------+------------+
| 6 | 5 | jon | reward | 1602216140 |
+----+---------+--------+--------+------------+
| 7 | 10 | bob | reward | 1602216150 |
+----+---------+--------+--------+------------+
| 8 | 10 | jon | reward | 1602216150 |
+----+---------+--------+--------+------------+
+----+---------+--------+--------+------------+
| 9 | 10 | sue | reward | 1602216150 |
+----+---------+--------+--------+------------+
+----+---------+--------+--------+------------+
| 10 | 10 | sue | prize | 1602216150 |
+----+---------+--------+--------+------------+
我的问题是:
SELECT
click_stats.userid as Name,
sum(credits) as TotalClicks
FROM click_stats
JOIN promo_used
ON click_stats.userid = promo_used.userid
JOIN promo_codes
ON promo_used.promoid = promo_codes.id
WHERE
click_stats.source = 'reward'
and FROM_UNIXTIME(clicked) > '2020-10-09'
and (promo_codes.name like '%forever%'
or promo_codes.name like 'novgfy%')
group by
Name
having
TotalClicks > 10
运行查询时的结果(返回总点击数*使用的促销代码数):
我想要的结果(仅限点击总数):
问题是(我怀疑)每次找到与promo_code.name匹配的数据时,它都会对click_统计数据求和。我只需要知道其中一个是否已被使用,然后返回该用户的总点击数。不要将
单击统计数据
加入到其他表中,因为您将获得的行数乘以一个因子,该因子等于促销使用的每个用户的行数
而是使用
中的运算符来过滤用户:
SELECT Userid, SUM(Credits) TotalClicks
FROM click_stats
WHERE source = 'reward'
AND FROM_UNIXTIME(clicked) > '2020-10-09'
AND Userid IN (
SELECT pu.Userid
FROM promo_used pu INNER JOIN promo_codes pc
ON pc.id = pu.promoid
WHERE pc.code like '%forever%' OR pc.code like 'novgfy%'
)
GROUP BY Userid
HAVING TotalClicks > 10
或:
请参阅。
结果:
请提供样本数据和预期结果。您的查询引用了4个表,我们对此一无所知。谢谢GMB,我已经在我的原始问题中添加了更多细节。按照@GMB的要求,请提供示例数据和预期结果。这是这个网站需要的一部分。我添加了一个预期结果的示例。不确定需要什么样的样本数据。如果这不正确,我将删除该问题并继续搜索,当我了解它如何更好地工作时,返回这里。谢谢你的帮助,谢谢!这就是我要找的。
SELECT
click_stats.userid as Name,
sum(credits) as TotalClicks
FROM click_stats
JOIN promo_used
ON click_stats.userid = promo_used.userid
JOIN promo_codes
ON promo_used.promoid = promo_codes.id
WHERE
click_stats.source = 'reward'
and FROM_UNIXTIME(clicked) > '2020-10-09'
and (promo_codes.name like '%forever%'
or promo_codes.name like 'novgfy%')
group by
Name
having
TotalClicks > 10
+--------------------+
| Results |
+------+-------------+
| Name | TotalClicks |
+------+-------------+
| bob | 60 |
+------+-------------+
| jon | 80 |
+------+-------------+
+--------------------+
| Expected Results |
+------+-------------+
| Name | TotalClicks |
+------+-------------+
| bob | 20 |
+------+-------------+
| jon | 40 |
+------+-------------+
SELECT Userid, SUM(Credits) TotalClicks
FROM click_stats
WHERE source = 'reward'
AND FROM_UNIXTIME(clicked) > '2020-10-09'
AND Userid IN (
SELECT pu.Userid
FROM promo_used pu INNER JOIN promo_codes pc
ON pc.id = pu.promoid
WHERE pc.code like '%forever%' OR pc.code like 'novgfy%'
)
GROUP BY Userid
HAVING TotalClicks > 10
SELECT Userid, SUM(Credits) TotalClicks
FROM click_stats
WHERE source = 'reward'
AND FROM_UNIXTIME(clicked) > '2020-10-09'
AND Userid IN (
SELECT pu.Userid FROM promo_used pu
WHERE EXISTS (
SELECT 1 FROM promo_codes pc
WHERE pc.id = pu.promoid AND (pc.code like '%forever%' OR pc.code like 'novgfy%' )
)
)
GROUP BY Userid
HAVING TotalClicks > 10
> Userid | TotalClicks
> :----- | ----------:
> bob | 20
> jon | 40