【问题标题】:SQL WHERE sub query in MySQLMySQL中的SQL WHERE子查询
【发布时间】:2018-12-03 00:04:32
【问题描述】:

我在 MySQL 中有一个表,

value tag main_tag
1 tag_A ABC
-1 tag_C ABC
-1 tag_A BCD
1 tag_C BCD
-1 tag_A ABC
1 tag_C ABC
-1 tag_A BCD
1 tag_C BCD
-1 tag_C BCD

共有三列valuetagmain_tag。在每个 main_tag 下还有其他几个 tag 。我想获取每个tagvalue 之和在每个main_tag 下等于零的记录。

这是我试过的查询,

SELECT * FROM foo WHERE ( WHERE sum(value) = 0 GROUP BY tag) GROUP BY main_tag ;

首先我试图找到值的总和GROUP BY tag,然后我使用GROUP BY main_tag。但它不起作用。

输出应该是:

value tag main_tag
1 tag_A ABC 
-1 tag_C ABC 
-1 tag_A ABC 
1 tag_C ABC 

【问题讨论】:

  • 请显示您想要的结果。
  • 更新了所需的输出
  • 如何查看哪个子标签属于哪个父标签?我在当前数据示例中看不到它。没有像 main_tag 列建议的那样称为 ABC、BCD 的标签。
  • 这一行有1个tag_A ABC,tag_A在main_tag ABC下。每个 main_tag 下可能有相同的标签名称

标签: mysql sql database postgresql database-administration


【解决方案1】:

这是你想要的吗?

select main_tag
from foo
group by main_tag
having sum(value) = 0;

【讨论】:

  • 不,我想按 BY 标签分组,然后按 main_tag 分组
【解决方案2】:

您需要将GROUP BY 子句与JOIN 一起使用:

select f.*
from foo f inner join 
           (select distinct tag
            from foo
            group by tag, main_tag
            having sum(value) = 0
          ) f1
          on f1.tag = f.tag;

【讨论】:

  • 返回同一张表
  • 它不适用于不同的用例。我已经用更多值更新了表格,请检查。
【解决方案3】:
Create table temp select 'value', CONCAT('tag','main_tag') 
as group_tag from your_table;

select group_tag
from temp
group by group_tag
having sum(value) = 0;

【讨论】:

  • 虽然这可能会回答问题,但最好添加一些关于此答案如何有助于解决问题的描述。请阅读How do I write a good answer 了解更多信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-17
  • 1970-01-01
  • 2011-12-03
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 2020-10-13
相关资源
最近更新 更多