mysql-SQL:进行配对和计数样本
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql-SQL:进行配对和计数样本,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2259字,纯文字阅读大概需要4分钟。
内容图文
![mysql-SQL:进行配对和计数样本](/upload/InfoBanner/zyjiaocheng/880/b0e7d9f79f5a465080d49b061e6dec40.jpg)
我有下表(示例):
ID |LOCATION|DAY
1 | 1 |20190301
1 | 2 |20190301
1 | 3 |20190301
1 | 1 |20190302
1 | 4 |20190302
1 | 4 |20190305
1 | 5 |20190302
2 | 4 |20190301
2 | 1 |20190301
2 | 3 |20190303
2 | 2 |20190305
其中ID为车号,Location为位置ID,时间为YYYYMMDD.我想编写一个SQL查询来计算每个月(YYYYMM)中每个carID的“成对位置”的数量:汽车在位置i和j中存在多少次.也就是说,最终结果应该像
ID|LOCATION 1|LOCATION 2|MONTH |count1|count 2
1 | 1 |2 |201903| 2 | 1
1 | 1 |3 |201903| 2 | 1
1 | 1 |4 |201903| 2 | 2
1 | 1 |5 |201903| 2 | 1
1 | 2 |3 |201903| 1 | 1
1 | 2 |4 |201903| 1 | 2
其中count1是位置1的计数,count2是位置2的计数,我们为每对location1和location2构造了该计数.
为了构造对,我尝试:
Select n1.location, n2.location
From
(
Select location
from table
) n1,
(
Select location
from table
) n2
Where n1.location < n2.location
Order by n1.location, n2.location
但我想计算每个位置(count1,count2)的数量,而不是成对计算.
我可以在SQL子查询中执行此操作吗?任何意见,将不胜感激.
解决方法:
这是一个奇怪的要求.您正在寻找两个位置的独立计数,但要在一行中对齐(这很奇怪,因为有很多重复的数据).
您可以在加入之前通过汇总来做到这一点:
with l as (
select l.id, l.location, date_format(l.time, '%Y%m') as yyyymm,
count(*) as cnt
from carlocations l
group by l.id, l.location, date_format(l.time, '%Y%m')
)
select l1.id, l1.location as location1, l2.location2, l1.yyyymm, l1.cnt as cnt2, l2.cnt as cnt2
from l l1 join
l l2
on l1.id = l2.id and l1.yyyymm = l2.yyyymm and
l1.location < l2.location;
MySQL 8支持with.在早期版本中,您需要在from子句中重复子查询.
编辑:
没有CTE,这看起来像:
select l1.id, l1.location as location1, l2.location2, l1.yyyymm, l1.cnt as cnt2, l2.cnt as cnt2
from (select l.id, l.location, date_format(l.time, '%Y%m') as yyyymm,
count(*) as cnt
from carlocations l
group by l.id, l.location, date_format(l.time, '%Y%m')
) l1 join
(select l.id, l.location, date_format(l.time, '%Y%m') as yyyymm,
count(*) as cnt
from carlocations l
group by l.id, l.location, date_format(l.time, '%Y%m')
) l2
on l1.id = l2.id and l1.yyyymm = l2.yyyymm and
l1.location < l2.location;
内容总结
以上是互联网集市为您收集整理的mysql-SQL:进行配对和计数样本全部内容,希望文章能够帮你解决mysql-SQL:进行配对和计数样本所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。