gpt4 book ai didi

php - mysql 组和过滤结果

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

我有 2 个疑问!

select LINE, ACCOUNT
from DATAS
where date between "2015-07-01" and "2015-07-15"
and SIG="in"
group by ACCOUNT
order by ACCOUNT

select LINE, ACCOUNT
from DATAS
where date between "2015-07-01" and "2015-07-15"
and SIG="out"
group by ACCOUNT
order by ACCOUNT

结果示例:

LINE-ACCOUNT, SIG
0-1309 IN
0-1331 IN
0-1340 IN
0-1361 IN
0-1404 IN
0-1555 IN

LINE-ACCOUNT, SIG
0-1098 OUT
0-1309 OUT
0-1322 OUT
0-1331 OUT
0-1340 OUT
0-1555 OUT

我想要 2 个查询来给出结果:

  1. 给我有“in”标志但没有“out”标志的帐户!
  2. 给我有“out”标志但没有“in”标志的帐户!

我用excel解决了,但是日复一日的解决太复杂了! ;)

如果更简单,我也接受 php 中的解决方案!

希望你明白我想要什么!

提前致谢

最佳答案

你尝试过这样的事情吗?

select * from 
(
(select LINE, ACCOUNT, SIG
from DATAS
where date between "2015-07-01" and "2015-07-15"
and SIG="in"
group by ACCOUNT
order by ACCOUNT)
union all
(select LINE, ACCOUNT, SIG
from DATAS
where date between "2015-07-01" and "2015-07-15"
and SIG="out"
group by ACCOUNT
order by ACCOUNT)
) t1
group by LINE, ACCOUNT
having count(Line) = 1

编辑:更正查询

编辑:这里是查询如何工作的简要说明。首先,我们选择具有 SIG = 'IN' 的每一行...然后我们附加具有 SIG = 'OUT' 的每一行。

现在事情变得有趣了。如果一行同时具有 IN 和 OUT 语句,它将在我们当前的结果集中出现两次,因为它将成为 SIG = "IN"和 SIG = "OUT"查询的一部分。另一方面,只有“IN”或“OUT”的行只会出现在两个内部查询之一中。我们将利用这一点。

外部 select 语句及其“group by LINE, ACCOUNT”语句使我们的结果集变平,从而允许我们使用 count() 函数。如果一行出现在两个查询中,则 count() 将等于 2...另一方面,如果一行仅出现在两个查询中的一个中,则 count() 将等于 1。这些就是我们想要的线条。

不过,在 SQL 中,您不能这样做:

select * from table where count() > 1

如果要使用聚合函数放置条件,则必须使用“having”子句,该子句放置在“group by”语句之后,其作用与“where”完全相同,只是与聚合函数一起使用。

关于php - mysql 组和过滤结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31476053/

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