Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django中的子查询计数_Python_Mysql_Django_Subquery - Fatal编程技术网

Python Django中的子查询计数

Python Django中的子查询计数,python,mysql,django,subquery,Python,Mysql,Django,Subquery,我对Python Django中的子查询计数有问题 查询MySQL: SELECT usuario.name, COUNT(*) AS Groups,( SELECT COUNT(*) FROM group WHERE group.user_id=user.id and state = 'on going') AS Started FROM user INNER JOIN group ON (user.id=group.user_id) WHERE user.rol =

我对Python Django中的子查询计数有问题

查询MySQL:

SELECT usuario.name, COUNT(*) AS Groups,(
    SELECT COUNT(*)
    FROM group
    WHERE group.user_id=user.id and state = 'on going') AS Started
FROM user
INNER JOIN group
ON (user.id=group.user_id)
WHERE user.rol = 'Provider'
GROUP BY group.user_id
ORDER BY Groups desc;
观点:

connected_query= GroupModel.objects.values(
'usuario__name').filter(
user__rol='PROVIDER'.lower(), status='ON_GOING'.lower()).annotate(
started=Count('user'))


totals_query = GroupModel.objects.values(
provider=Concat('user__name', Value(' '), 'user__surname')).annotate(
totals=Count('user'),connected=Subquery(connected_query.values('started')[:1])).order_by(
'-connected')


First query return:
<QuerySet [{'user__name': 'James', 'started': 3}, {'user__name': 'John', 'started': 2}, {'user__name': 'Frank', 'started': 2}, {'user__name': 'Sara', 'started': 1}]>

While second query return:
<QuerySet [{'user__name': 'James', 'totals': 10, 'started': 3}, {'user__name': 'John', 'totals': 10, 'started': 3}, {'user__name': 'Frank', 'totals': 12, 'started': 3}, {'user__name': 'Sara', 'totals': 9, 'started': 3}]>
from django.db.models import Count, Value, Case, When
from django.db.models.functions import Concat

totals_query = GrupoModel.objects.values(
provider=Concat('usuario__nombre', Value(' '), 'usuario__apellidos')).annotate(
totals=Count('user'),connected=Count(Case(When(status='ON_GOING'.lower(),then=1)))).order_by(
'-connected')
connected\u query=GroupModel.objects.values(
“usuario__名称”)。筛选器(
用户\uu rol='PROVIDER'.lower(),状态='ON\u GOING'.lower())。注释(
已启动=计数('user'))
totals\u query=GroupModel.objects.values(
provider=Concat('user\u name',Value('','user\u姓氏'))。注释(
totals=计数('user'),connected=子查询(connected\u query.values('started')[:1]))。订单依据(
“-连接的”)
第一次查询返回:
而第二个查询返回:
我需要查询返回以下内容:

<QuerySet [{'user__name': 'James', 'totals': 10, 'started': 3}, {'user__name': 'John', 'totals': 10, 'started': 2}, {'user__name': 'Frank', 'totals': 12, 'started': 2}, {'user__name': 'Sara', 'totals': 9, 'started': 1}]>

问题是第二个查询总是返回3,这是用户“James”连接的,如果在子查询I remove[:1]中,python会给我以下错误:django.db.utils.OperationalError:(1241,“操作数应该包含1列)”


我不知道在哪里继续,我有点绝望,任何帮助都是好的

我想你可以将你的查询更新到-

SELECT usuario.name, COUNT(*) AS Groups, COUNT(state = 'on going') AS Started
FROM user
INNER JOIN group
ON (user.id=group.user_id)
WHERE user.rol = 'Provider'
GROUP BY group.user_id
ORDER BY Groups desc;

它已经解决了,比使用子查询简单得多,我使用了新的MySQL查询:

SELECT us.name, COUNT(gr.Id) , COUNT(case when status='on going' then 1 END)
FROM user us
INNER JOIN group gr
ON (us.id = gr.User_id) 
WHERE us.Rol = "Provider"
GROUP BY gr.user_id
观点:

connected_query= GroupModel.objects.values(
'usuario__name').filter(
user__rol='PROVIDER'.lower(), status='ON_GOING'.lower()).annotate(
started=Count('user'))


totals_query = GroupModel.objects.values(
provider=Concat('user__name', Value(' '), 'user__surname')).annotate(
totals=Count('user'),connected=Subquery(connected_query.values('started')[:1])).order_by(
'-connected')


First query return:
<QuerySet [{'user__name': 'James', 'started': 3}, {'user__name': 'John', 'started': 2}, {'user__name': 'Frank', 'started': 2}, {'user__name': 'Sara', 'started': 1}]>

While second query return:
<QuerySet [{'user__name': 'James', 'totals': 10, 'started': 3}, {'user__name': 'John', 'totals': 10, 'started': 3}, {'user__name': 'Frank', 'totals': 12, 'started': 3}, {'user__name': 'Sara', 'totals': 9, 'started': 3}]>
from django.db.models import Count, Value, Case, When
from django.db.models.functions import Concat

totals_query = GrupoModel.objects.values(
provider=Concat('usuario__nombre', Value(' '), 'usuario__apellidos')).annotate(
totals=Count('user'),connected=Count(Case(When(status='ON_GOING'.lower(),then=1)))).order_by(
'-connected')

组是一个保留字。我知道,它真的是一个grupo(西班牙语)查询,我得到以下信息:
每个人的状态都是“正在进行”吗?是的,所有用户,至少有一个状态是“正在进行”谢谢你的查询,它给了我一个提示,我不知道你可以给参数计数,我的ny查询是:
选择我们。名称,计数(gr.Id),从user us INNER JOIN gr on(us.id=gr.user\U id)开始计数(状态为“继续”时为1结束),其中us.Rol=“Provider”gr.user\U id分组