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