程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了从 3 个不同的表中选择数据分组并限制为 3大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决从 3 个不同的表中选择数据分组并限制为 3?

开发过程中遇到从 3 个不同的表中选择数据分组并限制为 3的问题如何解决?下面主要结合日常开发的经验,给出你关于从 3 个不同的表中选择数据分组并限制为 3的解决方法建议,希望对你解决从 3 个不同的表中选择数据分组并限制为 3有所启发或帮助;

我有 3 个表,分别命名为 Referrals、ProvIDers、suppliers。

供应商表

| ID | name 
| 1  | supplier A
| 2  | supplier B
| 3  | supplier C
| 4  | supplier D

供应商表

| ID | name 
| 1  | ProvIDer A
| 2  | ProvIDer B
| 3  | ProvIDer C
| 4  | ProvIDer D

推荐表

| ID | clIEnt_name | provIDer_ID | supplier_ID  | created_at
| 1  | ClIEnt A    | 1           | 1            | 2021-01-20
| 2  | ClIEnt B    | 1           | 1            | 2021-01-21
| 1  | ClIEnt C    | 2           | 1            | 2021-01-22
| 1  | ClIEnt A    | 2           | 2            | 2021-01-23
| 1  | ClIEnt A    | 3           | 2            | 2021-01-24
| 1  | ClIEnt A    | 1           | 3            | 2021-01-24
| 1  | ClIEnt A    | 4           | 3            | 2021-01-25
| 1  | ClIEnt A    | 4           | 4            | 2021-01-26
| 1  | ClIEnt A    | 1           | 1            | 2021-01-20

我想按以下格式按供应商(前 3 名)计算每个供应商的推荐次数:

结果格式应为:

| ID | referral_count | provIDer_ID | supplier_ID  | created_at
| 1  | 3         | 1           | 1            | January
| 2  | 2         | 1           | 1            | January
| 1  | 1         | 2           | 1            | January
| 1  | 2         | 2           | 2            | January
| 1  | 3         | 3           | 2            | January
| 1  | 1         | 1           | 2            | January
| 1  | 2         | 4           | 3            | January
| 1  | 3         | 4           | 3            | January
| 1  | 4         | 1           | 3            | January

谢谢

解决方法

如果我理解正确,您只需要一个 count() 作为窗口函数:

select r.*,count(*) over (partition by provider_id,supplier_id,year(created_at),month(created_at)) as referral_count
from referrals r;
,

如果你的mysql版本是8或更高,你可以使用count(*)窗口函数来实现:

select 
    id,(count(client_name) over (partition by provider_id,monthname(created_at))) referral_count,provider_id,monthname(created_at) created_at
from Referrals;

如果您使用的是旧版本的 MySQL,那么您可以在子查询中使用以下选项:

select id,(select count(*) from Referrals rf where rf.provider_id=r.Provider_id and rf.supplier_id=r.supplier_id
 group by provider_id,monthname(created_at)) referral_count,monthname( created_at) created_at
from Referrals r;

                                                                    

输出:

id provider_id supplier_id referral_count created_at
1 1 1 3 一月
2 1 1 3 一月
1 2 1 1 一月
1 2 2 1 一月
1 3 2 1 一月
1 1 3 1 一月
1 4 3 1 一月
1 4 4 1 一月
1 1 1 3 一月

大佬总结

以上是大佬教程为你收集整理的从 3 个不同的表中选择数据分组并限制为 3全部内容,希望文章能够帮你解决从 3 个不同的表中选择数据分组并限制为 3所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: