Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.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
Mysql 按范围计数仅返回一行_Mysql_Sql - Fatal编程技术网

Mysql 按范围计数仅返回一行

Mysql 按范围计数仅返回一行,mysql,sql,Mysql,Sql,我正在尝试获取一个输出以用于另一个调用。 我想要的输出是 Row | Col | Data | Seq <70% | Voters | 5519 | 8 <80% | Voters | 4352 | 8 <90% | Voters | 3251 | 8 100% | Voters | 2511 | 8 我的密码是 SELECT CASE WHEN (poll_propensity >= 0.70

我正在尝试获取一个输出以用于另一个调用。 我想要的输出是

Row   |   Col   |  Data  |  Seq

<70%  | Voters  |  5519  |  8
<80%  | Voters  |  4352  |  8
<90%  | Voters  |  3251  |  8
100%  | Voters  |  2511  |  8
我的密码是

SELECT CASE
        WHEN (poll_propensity >= 0.70 AND perm_absentee = 'N' AND mail_propensity = 0)  THEN '< 70%' 
        WHEN (poll_propensity >= 0.80 AND perm_absentee = 'N' AND mail_propensity = 0)  THEN '< 80%' 
        WHEN (poll_propensity >= 0.90 AND perm_absentee = 'N' AND mail_propensity = 0)  THEN '< 90%'
        WHEN (poll_propensity >= 1 AND perm_absentee = 'N' AND mail_propensity = 0)     THEN '100%' 
       END AS Row,            

'Voters' AS Col,
COUNT(voter_id) AS Data,
8 AS Seq

FROM (  SELECT p.voter_id, p.perm_absentee, vp.poll_propensity, vp.mail_propensity 
        FROM VoterProfile p
             INNER JOIN DistrictPrecinct d ON d.precinct_id=p.precinct_code 
             INNER JOIN VoterPropensity vp ON p.voter_id=vp.voter_id        
        WHERE d.district_id= 3 AND vp.election_type= 'T' ) as derived 
GROUP BY Row
但是我得到的所有输出就像

Row   |   Col   |  Data  |  Seq

<70%  | Voters  |  5519  |  8

如果有人能帮上忙,只有一个能通过,那就太好了。

只需更改WHEN语句的顺序,因为1>.7将1与.7合并在一起,您需要从.1开始,然后转到.7

SELECT CASE
        WHEN (poll_propensity >= 1 AND perm_absentee = 'N' AND mail_propensity = 0)     THEN '100%' 
        WHEN (poll_propensity >= 0.90 AND perm_absentee = 'N' AND mail_propensity = 0)  THEN '< 90%'
        WHEN (poll_propensity >= 0.80 AND perm_absentee = 'N' AND mail_propensity = 0)  THEN '< 80%' 
        WHEN (poll_propensity >= 0.70 AND perm_absentee = 'N' AND mail_propensity = 0)  THEN '< 70%' 
       END AS Row,            

'Voters' AS Col,
COUNT(voter_id) AS Data,
8 AS Seq

FROM (  SELECT p.voter_id, p.perm_absentee, vp.poll_propensity, vp.mail_propensity 
        FROM VoterProfile p
             INNER JOIN DistrictPrecinct d ON d.precinct_id=p.precinct_code 
             INNER JOIN VoterPropensity vp ON p.voter_id=vp.voter_id        
        WHERE d.district_id= 3 AND vp.election_type= 'T' ) as derived 
GROUP BY Row

或者,您可以将操作从>=更改为<,并保持顺序不变;但我不确定这是否会为您提供与您所查找的相同的子集。

看起来您希望从以下语句返回结果集:

SELECT r.Row
     , 'Voters' AS Col
     , CASE r.Row
         WHEN '< 70%' THEN IFNULL(d.c70,0)
         WHEN '< 80%' THEN IFNULL(d.c80,0)
         WHEN '< 90%' THEN IFNULL(d.c90,0)
         WHEN '100%' THEN IFNULL(d.c100,0)
       END AS Data
     , 8 AS Seq
  FROM ( SELECT '< 70%' AS Row
         UNION ALL SELECT '< 80%' 
         UNION ALL SELECT '< 90%'
         UNION ALL SELECT '100%' 
       ) r
 CROSS
  JOIN ( SELECT SUM(vp.poll_propensity >= 0.70 AND vp.perm_absentee = 'N' AND vp.mail_propensity = 0) AS c70
              , SUM(vp.poll_propensity >= 0.80 AND vp.perm_absentee = 'N' AND vp.mail_propensity = 0) AS c80
              , SUM(vp.poll_propensity >= 0.90 AND vp.perm_absentee = 'N' AND vp.mail_propensity = 0) AS c90
              , SUM(vp.poll_propensity >= 1    AND vp.perm_absentee = 'N' AND vp.mail_propensity = 0) AS c100
              , COUNT(p.voter_id) AS count_voter_id
           FROM VoterProfile p
           JOIN DistrictPrecinct d ON d.precinct_id=p.precinct_code
           JOIN VoterPropensity vp ON p.voter_id=vp.voter_id
          WHERE d.district_id = 3
            AND vp.election_type = 'T'
       ) d
 ORDER BY r.Row

你只需要简单地改变时间的顺序。这是可行的,但它会从主计数中减去。例如,它说100%是4600,90%是256,但90%应该是4856。加上这两个数字,我就可以得到我想要的输出。我将插入我的例程,看看它是如何工作的。谢谢你的工作,我在我的代码中使用了这个代码,对选民来说非常有用,但现在我想把它和同样的东西结合起来,但我想用它来计算家庭。所以我把count改为COUNTHHKey,这是一个家庭的家庭钥匙。但是当我这样修改它时,在底部我说groupby p.HHKey after和vp.election_type='T',它返回30000行而不是5行。。。任何帮助都将不胜感激
SUM(vp.poll_propensity >= 0.80 AND vp.poll_propensity < 0.90 
     AND vp.perm_absentee = 'N' AND vp.mail_propensity = 0) AS c80