gpt4 book ai didi

mysql - 分组但仅计算事件行-SQL

转载 作者:行者123 更新时间:2023-11-29 12:57:29 24 4
gpt4 key购买 nike

我有下表:

scenes
------
scene_id
title
video_url
modified_at
uuid


likes
----
scene_id
uuid
active


users
-----
uuid
username

问题1:我想按降序获取场景、scene_id、作者的点赞数;请注意,我们需要只计算点赞表中活跃的点赞!

我的尝试:

SELECT s.scene_id,s.video_url,s.title,s.uuid, u.username as author,s.data,count(l.active) as likes

FROM scenes s
left join likes l
on l.scene_id = s.scene_id
join users u
on u.uuid = s.uuid
where s.video_url IS not NULL
group by s.scene_id
order by modified_at DESC;

但这计算的是所有点赞数,无论是否活跃!我不知道如何在我的查询中添加该查询!

问题2:

另外我想知道是否可以在结果集中添加另一列来显示特定用户(可以在 where 子句中传递和使用 uuid)是否喜欢结果集中的每个场景?是否可以通过一次查询获得此结果?

如果您需要更多说明,请告诉我!

谢谢!

最佳答案

active上添加谓词栏目简单明了;它只取决于它的表示方式...是一个整数类型列,使用 0 和/或 NULL 来指示它是“不活动的”,使用 1 和/或任何正整数来指示它是 active

要获取“按降序排列的场景、scene_id、作者的点赞数”,您可以执行以下操作:

SELECT COUNT(l.scene_id) AS cnt_likes
, s.scene_id AS scene_id
, a.username AS author
FROM scenes s
LEFT
JOIN users a
ON a.uuid = s.uuid
LEFT
JOIN likes l
ON l.scene_id = s.scene_id
AND l.active+0
GROUP BY s.scene_id
ORDER BY cnt_likes DESC, s.scene_id DESC, a.username DESC

如果列 active是字符类型,并且您使用值“yes”来指示 like 处于事件状态,您需要更改谓词,

替换:

   AND l.active+0

与:

   AND l.active = 'yes'

等等

<小时/>

对于第二个问题,确定对某个场景有“积极喜欢”的用户

(即聚合中包含的行),这是有问题的,因为可能有多个用户对某个场景有类似的情况...我们确定要返回哪些用户,只是其中的任何一个,还是全部? ...我只是更仔细地重新阅读了您的问题。您想知道某个特定的已识别用户是否拥有 like对于场景。

只需测试类似行上的 uuid 是否等于您要查找的值,然后返回 0 或 1,然后获取该值的 MAX()。

例如

SELECT COUNT(l.scene_id)         AS cnt_likes
, s.scene_id AS scene_id
, a.username AS author
, MAX(l.uuid = 'auser') AS liked_by_user
FROM scenes s
LEFT
JOIN users a
ON a.uuid = s.uuid
LEFT
JOIN likes l
ON l.scene_id = s.scene_id
AND l.active+0
GROUP BY s.scene_id
ORDER BY cnt_likes DESC, s.scene_id DESC, a.username DESC

跟进

表达式

     MAX(l.uuid = 11 )

可以返回 1、0 或 NULL。 (1 相当于 bool 值 TRUE,0 相当于 bool 值 false,NULL 是未知的,或者在这种情况下,我们也将其视为 FALSE。

在 MySQL 中,整数可以被视为 bool 值, bool 值也被当作整数处理。

要返回字符串“true”或“false”,您可以使用 IF() 函数

     IF(MAX(l.uuid = 11 ), 'true', 'false')

关于mysql - 分组但仅计算事件行-SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23818401/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com