mysql - 如何统计where子句的结果以计算MYSQL select子句的比例?

标签 mysql select subquery

我从这个查询开始,它返回 8 条具有“已声明”状态的记录。我正在查看 invites-from-address 列中的地址是否与 moves-from-address 列中的地址不同:

SELECT i.id, i.company_id, i.status,  
  ia_f.base_street as "invites-from-address", a_f.base_street as "moves-from-address", 
  ia_t.base_street as "invites-to-address", a_t.base_street as "moves-to-address", i.`mover_first_name`, 
  i.mover_last_name, i.`to_address_id`

FROM invites i
JOIN moves m ON i.id = m.`claimed_invite_id`
JOIN `invite_addresses` ia_f ON ia_f.id = i.`from_address_id`
JOIN addresses a_f ON a_f.id = m.from_address_id

JOIN `invite_addresses` ia_t ON ia_t.id = i.to_address_id
JOIN addresses a_t ON a_t.id = m.to_address_id

WHERE i.`company_id` = 1040345
GROUP BY id

我在下面的查询中尝试做的是动态创建一个 average_discrepancy 列,该列显示 invites-from-address 之间不同的地址比例> 和从地址移动。我能够通过使用 WHERE 子句成功检查地址差异,该子句检查 ia_f.base_street 不等于 a_f.base_street (其中分别是列 invites-from-addressmoves-from-address 的别名),但是当我将此 WHERE 子句放在 中时>count 函数在我的 SELECT 中,因为它不起作用。是否因为我无法在 SELECTcount 函数或两者中放置 WHERE 子句?尝试划分 SELECT 子句中两次调用 count 函数的结果是否也存在问题?

SELECT i.id, i.company_id, i.status, 
  count(WHERE ia_f.base_street != a_f.base_street)/count(i.status="claimed") as "average_discrepancy", 
  ia_f.base_street as "invites-from-address", a_f.base_street as "moves-from-address", 
  ia_t.base_street as "invites-to-address", a_t.base_street as "moves-to-address",
  i.`mover_first_name`, 
  i.mover_last_name, i.`to_address_id`

FROM invites i
JOIN moves m ON i.id = m.`claimed_invite_id`
JOIN `invite_addresses` ia_f ON ia_f.id = i.`from_address_id`
JOIN addresses a_f ON a_f.id = m.from_address_id

JOIN `invite_addresses` ia_t ON ia_t.id = i.to_address_id
JOIN addresses a_t ON a_t.id = m.to_address_id

WHERE i.`company_id` = 1040345

AND i.status = "claimed" 

最佳答案

您需要将其放入 SUM 而不是 COUNT 中。像这样的事情就可以解决问题:

 SELECT i.id, i.company_id, i.status, 
  SUM(CASE WHEN ia_f.base_street != a_f.base_street THEN 1 ELSE 0 END)/ SUM(CASE WHEN i.status='claimed' THEN 1 ELSE 0 END) as 'average_discrepancy', 
  ia_f.base_street as 'invites-from-address', 
  a_f.base_street as 'moves-from-address', 
  ia_t.base_street as 'invites-to-address', 
  a_t.base_street as 'moves-to-address',
  i.mover_first_name, 
  i.mover_last_name, 
  i.to_address_id

FROM invites i
JOIN moves m ON i.id = m.claimed_invite_id
JOIN invite_addresses ia_f ON ia_f.id = i.from_address_id
JOIN addresses a_f ON a_f.id = m.from_address_id

JOIN invite_addresses ia_t ON ia_t.id = i.to_address_id
JOIN addresses a_t ON a_t.id = m.to_address_id

WHERE i.company_id = 1040345

AND i.status = 'claimed'

关于mysql - 如何统计where子句的结果以计算MYSQL select子句的比例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36925428/

相关文章:

php - MySQL 从多个表中选择

mysql - 如何以无序方式比较 SQL 查询中的字段(可能是数组)?

mysql - 将未知数量的数据显示为列名

sql - 在SQL中使用子查询更新多行

mysql - 在一个查询中选择记录并更新

php - MySQL INSERT 查询不更新数据库

html - 为什么 <select> 有时是白色有时是灰色?

postgresql - Postgres 通过关系选择所有数据

sql - 使用来自其他两个列的数据更新空列所有 varchar/text Postgresql

mysql - 来自 SQL 的 CakePHP 子查询