编辑:响应效果很好,但与我的解释不完全一样,我只想为每个函数返回1个结果,因此计算结果中有多少个奇数,并计算有多少个偶数结果如何?
SQL拨弄数据
http://sqlfiddle.com/#!9/dfbfa7/1
我试图通过使用2个函数拆分结果来计算偶数和奇数,但我的结果与mysql表中的结果不匹配。
数据
Traceback (most recent call last):
File "/home/giorgos/.local/share/virtualenvs/ev-loader-backend-tcqKXHeF/lib/python3.7/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/home/giorgos/.local/share/virtualenvs/ev-loader-backend-tcqKXHeF/lib/python3.7/site-packages/django/core/handlers/base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/home/giorgos/.local/share/virtualenvs/ev-loader-backend-tcqKXHeF/lib/python3.7/site-packages/django/core/handlers/base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/giorgos/.local/share/virtualenvs/ev-loader-backend-tcqKXHeF/lib/python3.7/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs)
File "/home/giorgos/.local/share/virtualenvs/ev-loader-backend-tcqKXHeF/lib/python3.7/site-packages/rest_framework/viewsets.py", line 114, in view
return self.dispatch(request, *args, **kwargs)
File "/home/giorgos/.local/share/virtualenvs/ev-loader-backend-tcqKXHeF/lib/python3.7/site-packages/rest_framework/views.py", line 505, in dispatch
response = self.handle_exception(exc)
File "/home/giorgos/.local/share/virtualenvs/ev-loader-backend-tcqKXHeF/lib/python3.7/site-packages/rest_framework/views.py", line 465, in handle_exception
self.raise_uncaught_exception(exc)
File "/home/giorgos/.local/share/virtualenvs/ev-loader-backend-tcqKXHeF/lib/python3.7/site-packages/rest_framework/views.py", line 476, in raise_uncaught_exception
raise exc
File "/home/giorgos/.local/share/virtualenvs/ev-loader-backend-tcqKXHeF/lib/python3.7/site-packages/rest_framework/views.py", line 502, in dispatch
response = handler(request, *args, **kwargs)
File "/home/giorgos/.local/share/virtualenvs/ev-loader-backend-tcqKXHeF/lib/python3.7/site-packages/rest_framework/mixins.py", line 19, in create
self.perform_create(serializer)
File "/home/giorgos/.local/share/virtualenvs/ev-loader-backend-tcqKXHeF/lib/python3.7/site-packages/rest_framework/mixins.py", line 24, in perform_create
serializer.save()
File "/home/giorgos/.local/share/virtualenvs/ev-loader-backend-tcqKXHeF/lib/python3.7/site-packages/rest_framework/serializers.py", line 212, in save
self.instance = self.create(validated_data)
File "/home/giorgos/Desktop/ev-loader-backend/stations/serializers.py", line 185, in create
reservation = Reservation.objects.create(user=user.id, plug=plug.id, **validated_data)
Exception Type: AttributeError at /api/stations/reservations/
Exception Value: 'NoneType' object has no attribute 'id'
返回奇数计数的功能
select number from table group by number
results
1,4,6,7,8,9,11,12
和返回偶数计数的函数
SELECT
COUNT(CASE WHEN (number% 2) > 0 THEN number ELSE NULL END) as odd
FROM test.table
WHERE date = CURDATE() and time > now() - interval 60 second group by number
LIMIT 1
我希望结果会
奇数= 4 偶数= 4
但是我得到了
奇数= 8 偶= 0
我要去哪里错了?
答案 0 :(得分:1)
也许尝试这样的事情。
对于偶数:
COUNT(SELECT * FROM `table` WHERE mod(number, 2)=0);
对于奇数:
COUNT(SELECT * FROM `table` WHERE mod(number, 2)>0);
这将返回唯一的奇数和偶数,然后使用php收集这些数字。
答案 1 :(得分:1)
COUNT将累加它遍历的所有行
您必须使用SUM:
SUM(CASE WHEN (number% 2) > 0 THEN 1 ELSE 0 END) as odd
SUM(CASE WHEN (number% 2) = 0 THEN 1 ELSE 0 END) as even
对于简单的操作,IF比CASE干净得多:
SUM(IF(number % 2 > 0, 1, 0)) as odd
SUM(IF(number% 2 = 0, 1, 0)) as even
答案 2 :(得分:0)
您的查询返回错误结果的原因可能是因为您在使用limit 1
时也尝试将其删除,如果必须使用group by
,请使用group by number
,例如,我在这里更改了查询。
SELECT
count(CASE WHEN (a.number% 2) = 0 THEN a.number ELSE NULL END) as even,
count(CASE WHEN (a.number% 2) <> 0 THEN a.number ELSE NULL END) as odd
FROM (select number from test group by number) a;
http://sqlfiddle.com/#!9/dfbfa7/22
对于您创建的结果即时获得5个偶数和5个奇数的设置,如果结果与实际数据不同,可能必须重新检查where子句中的条件。