【问题标题】:PHP MySQL query: match two tables with percentage matchPHP MySQL查询:以百分比匹配匹配两个表
【发布时间】:2013-06-10 19:19:22
【问题描述】:

我有两个“技能”表,第一个包含员工的技能,第二个包含公司的“技能”。

表员工技能

CREATE TABLE `employee_skills` (
  `e_id` int(8) NOT NULL,
  `skill` int(8) NOT NULL,
  `points` enum('0','25','50','75','100') COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`u_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

表公司技能

CREATE TABLE `company_skills` (
  `c_id` int(8) NOT NULL,
  `skill` int(8) NOT NULL,
  `points` enum('0','25','50','75','100') COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`u_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

因此,如果一家公司的技能 Windows 得分为 100 分,员工为 25 分,则匹配百分比为 25%。我正在使用以下查询来获取结果:

$result = $connection->prepare("select u_id, skill, points, COUNT(points) from employee_skills");

预期的结果应该与某些技能相匹配,并返回类似于以下的百分比:

技能 |匹配

  • 窗户 | 25%
  • Linux | ...%
  • mac | ...%

【问题讨论】:

  • 您可能在寻找 sum(points) 而不是 count
  • 如果员工技能大于公司技能,你想要100%还是125%、150%之类的东西
  • 我希望百分比低于 100%
  • 将点存储为 INT。如果 Minesh 的答案不是您想要的,请考虑按照相同的思路提供一个 sqlfiddle。

标签: php mysql


【解决方案1】:

试试下面:

SELECT e_id, e.skill, c.skill, (e.points/c.points)*100 from employee_skills as e, company_skills as c
WHERE e.skill = c.skill
GROUP BY e.e_id,e.skill

见下文:

SELECT c.skill, total_emp_points, c.points as total, 
(total_emp_points/c.points)*100 as percnt FROM company_skills AS c,
(SELECT e.skill, SUM(e.points) as total_emp_points 
    FROM employee_skills as e 
    GROUP BY e.skill) as emp
WHERE c.skill = emp.skill;

见SqlFiddle

【讨论】:

  • @JasonB 请注意,如果要使用 SUM() 函数,则需要更改点的数据类型以删除枚举并使用 int。
  • 感谢您的回答!我用 SqlFiddle 尝试了一些东西,但如果公司在一项技能上得分 100 分,而员工得分 75 分,则查询返回 125,而不是 75(%) 匹配。
  • @JasonB 您是在寻找员工明智百分比还是总员工百分比对公司积分?
  • 在这种情况下,我正在寻找员工总数占公司积分的百分比
  • @JasonB 员工总数或平均员工数?因为如果员工 A 得到 75/100 而员工 B 得到 50/100,那么总数将是 125/100 ,还是需要平均 (75+50/2)/100 = 62.5 ?
猜你喜欢
  • 2012-06-05
  • 1970-01-01
  • 2021-05-07
  • 2020-10-09
  • 2012-04-05
  • 1970-01-01
  • 1970-01-01
  • 2012-08-23
  • 1970-01-01
相关资源
最近更新 更多