带有HAVING COUNT子句的mysql查询
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了带有HAVING COUNT子句的mysql查询,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1648字,纯文字阅读大概需要3分钟。
内容图文
所以,我有一个特定的查询,我正在尝试调整一下.对项目的需求有所改变,我不知道如何处理这个问题.
我有3个表 – 一个主表,一个“标签”表,然后是一个链接表,用于将标签绑定到主条目.皱纹是给予该链接的权重,并且用于对链接到主表中的特定Name条目的标签的总权重求和.简而言之,主条目上可能有多个标签,每个标签具有不同的权重.当前查询对所有标记权重进行求和,并按所有标记的总和对它们进行排序.
UID | Name
-----------------
123 | Robert
UID | Tag_Name
-----------------
1 | Name_One
2 | Name_Two
Tag_ID | Name_ID | Weight
-----------------------------
2 | Name_One | 2
1 | Name_Two | 3
1 | Name_One | 5
目前,我已经构建了这个以实现这一点,其中2,1是我想要匹配的标签id的字符串:
SELECT person.id,
SUM(linkage.weight) AS total_weight
FROM (person)
INNER JOIN linked_tags AS linkage
ON linkage.track_id = person.id AND linkage.tag_id IN (2,1)
GROUP BY person.id
HAVING COUNT(DISTINCT linkage.tag_id)=1
ORDER BY total_weight DESC
我想将它扩展到另一个用途.现在,作为字符串传入的标记id是减法的.它只查找匹配,其中两个标记ID都存在于某个人ID.如果我想传入另一个id的字符串,如果任何人的id匹配该字符串中的任何标签id,然后是id的当前减去字符串,再加上这些标签的权重,我该如何处理它?
解决方法:
我相信你的查询的正确having子句是:
HAVING COUNT(DISTINCT linkage.tag_id)=2
您的版本只找到1个标记.
以下版本的查询标记3和4是可选的:
SELECT person.id, SUM(linkage.weight) AS total_weight
FROM person INNER JOIN
linked_tags AS linkage
ON linkage.track_id = person.id AND
linkage.tag_id IN (2, 1, 3, 4)
GROUP BY person.id
HAVING COUNT(DISTINCT case when linkage.tag_id in (1, 2) then linkage.tag_id end) = 2
ORDER BY total_weight DESC ;
最大的区别是在count(distinct)子句中使用case语句.
内容总结
以上是互联网集市为您收集整理的带有HAVING COUNT子句的mysql查询全部内容,希望文章能够帮你解决带有HAVING COUNT子句的mysql查询所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。