【问题标题】:MySQL: Is there a way to select a column and use it in "multiple ways"?MySQL:有没有办法选择一列并以“多种方式”使用它?
【发布时间】:2020-10-30 20:54:22
【问题描述】:

我正在学习 MySQL,但遇到了一个我找不到答案的问题。我有一个包含列的数据库:company 和 company_response。我现在按降序查询了这些公司,以便以救济方式解决最多投诉的公司排在首位。问题是我现在必须计算“以缓解方式关闭”的实例的比率。还有其他两个响应选项,我找不到制作“比率”列(以救济关闭/所有投诉关闭)的方法,以便我可以在救济金额旁边显示比率。有没有人可以帮助我解决这个问题?

实际上,我不知道如何创建“所有实例”以及比率列,因为我已经使用 where 子句创建了我的 Total relieves

这是我目前的查询:

SELECT company AS "Company name", count(company_response) AS "Total relieves"
FROM cfpb_complaints_2500
WHERE company_response = "Closed with relief"
GROUP BY company
ORDER BY count(company_response) DESC;

【问题讨论】:

  • 使用更标准的名称(不含空格)。使用查询以一致的方式检索结果,而不是对其进行格式化。

标签: mysql sql heidisql


【解决方案1】:

尝试使用条件计数:

SELECT company AS "Company name",
       COUNT(CASE WHEN company_response = 'Closed with relief' THEN 1 END) as "Total Relieves",
       COUNT(CASE WHEN company_response = 'Closed with relief' THEN 1 END) / COUNT(*) as "Ratio of Relieves"
FROM cfpb_complaints_2500
GROUP BY company

【讨论】:

  • 谢谢,这帮了大忙!有没有办法改变这个查询,让它由有最多救济的公司订购?我尝试添加 ORDER BY "Total Relieves",但没有成功。
  • @coderfrombiz 没问题,很高兴它有所帮助 - 尝试在您的 ORDER BY 中使用反引号而不是 Total Relieves 周围的引号
  • 我让它与ORDER BY `Total Relieves` DESC一起工作。再次感谢!
  • @coderfrombiz 好交易 :) 顺便说一句,此处记录了使用别名的行为排序dev.mysql.com/doc/refman/5.6/en/problems-with-alias.html,并且我的答案中的条件计数有效,因为ELSE 默认返回NULL,这不是' t 数。你也可以使用SUM(... THEN 1 ELSE 0 END),这完全取决于个人喜好。
【解决方案2】:

您可以使用子查询来计算来自公司的所有投诉

CREATE tABLE cfpb_complaints_2500 (company int,company_response varchar(100))
insert INTO cfpb_complaints_2500 VALUES (1,"Closed with relief")
,(1,"Closed with relief")
,(1,"Closed without relief")
,(1,"Closed without relief")
,(1,"Closed without relief")
,(1,"Closed without relief"),(2,"Closed with relief")
,(2,"Closed with relief")
,(2,"Closed without relief")
,(2,"Closed without relief")
SELECT company AS "Company name"
,count(company_response) AS "Total relieves"
, count(company_response)/ (SELECT count(*) FROM cfpb_complaints_2500 WHERE company = cf.company) AS "ratio" 
FROM cfpb_complaints_2500 cf
WHERE company_response = "Closed with relief"
GROUP BY company
ORDER BY ratio DESC;
公司名称 |总缓解|比率 ------------: | -------------: | -----: 2 | 2 | 0.5000 1 | 2 | 0.3333

db小提琴here

【讨论】:

  • 谢谢!出于某种原因,ORDER BY -command 对我来说不能正常工作,但除此之外它工作得很好
  • 它没有在顶部显示最高比率。一定是我的错误,因为它现在有效。对于给您带来的不便,我深表歉意。
猜你喜欢
  • 2012-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-18
  • 2017-04-08
  • 1970-01-01
相关资源
最近更新 更多