我有一个 MySQL 数据库,其中包含表“人员”、“问题”和“答案”。我有这样的疑问:
SELECT CONCAT(people.firstName, ' ', people.lastName) as Name, people.emailAddress, questions.fruit, answers.fruitID, answers.info, answers.dateLogged, questions.fruitID, questions.questionairID, questions.person
From answers
Join questions ON answers.fruitID= questions.fruitID
JOIN people ON questions.person= people.personID
WHERE questions.questionairID= '24'
ORDER BY people.personID
产生以下结果:
+------------------+--------------------+--------+-----------------+-------------------+-------------------+-----------------+---------------+--------+
| Name | emailAddress | fruit | fruitInstanceID | info | dateLogged | fruitInstanceID | questionairID | person |
+------------------+--------------------+--------+-----------------+-------------------+-------------------+-----------------+---------------+--------+
| Harry Potter | hpotter@gmail.com | apple | 107 | NULL | 05/26/17 07:23 PM | 107 | 24 | 6 |
| Ron Weasley | rweasley@gmail.com | apple | 113 | NULL | 05/26/17 06:30 PM | 113 | 24 | 8 |
| Hermione Granger | hgranger@gmail.com | apple | 116 | NULL | 05/26/17 06:29 PM | 116 | 24 | 9 |
| Hermione Granger | hgranger@gmail.com | orange | 114 | NULL | 05/26/17 06:36 PM | 114 | 24 | 9 |
| Hermione Granger | hgranger@gmail.com | apple | 116 | NULL | 05/26/17 08:28 PM | 116 | 24 | 9 |
| Hermione Granger | hgranger@gmail.com | orange | 114 | NULL | 05/26/17 08:28 PM | 114 | 24 | 9 |
| Hermione Granger | hgranger@gmail.com | orange | 114 | some extra info | 05/26/17 08:29 PM | 114 | 24 | 9 |
| Hermione Granger | hgranger@gmail.com | orange | 114 | more extra info | 05/26/17 08:29 PM | 114 | 24 | 9 |
| Hermione Granger | hgranger@gmail.com | orange | 114 | NULL | 05/26/17 08:31 PM | 114 | 24 | 9 |
| Severus Snape | ssnape@gmail.com | apple | 119 | NULL | 05/26/17 06:37 PM | 119 | 24 | 10 |
| Severus Snape | ssnape@gmail.com | orange | 117 | NULL | 05/26/17 06:46 PM | 117 | 24 | 10 |
| Severus Snape | ssnape@gmail.com | orange | 117 | user entered info | 05/26/17 06:46 PM | 117 | 24 | 10 |
| Severus Snape | ssnape@gmail.com | orange | 117 | more user info | 05/26/17 06:46 PM | 117 | 24 | 10 |
| Severus Snape | ssnape@gmail.com | orange | 117 | info again | 05/26/17 06:46 PM | 117 | 24 | 10 |
| Remus Lupin | rlupin@gmail.com | apple | 122 | NULL | 05/26/17 06:29 PM | 122 | 24 | 11 |
| Viktor Krum | vkrum@gmail.com | apple | 125 | NULL | 05/26/17 06:30 PM | 125 | 24 | 12 |
| Molly Weasley | mweasley@gmail.com | apple | 128 | NULL | 05/26/17 06:36 PM | 128 | 24 | 13 |
| Molly Weasley | mweasley@gmail.com | apple | 128 | NULL | 05/26/17 07:22 PM | 128 | 24 | 13 |
| Molly Weasley | mweasley@gmail.com | orange | 126 | NULL | 05/26/17 07:37 PM | 126 | 24 | 13 |
| Molly Weasley | mweasley@gmail.com | orange | 126 | NULL | 05/26/17 07:37 PM | 126 | 24 | 13 |
| Oliver Wood | owood@gmail.com | apple | 131 | NULL | 05/26/17 06:33 PM | 131 | 24 | 14 |
| Oliver Wood | owood@gmail.com | banana | 133 | NULL | 05/26/17 06:33 PM | 133 | 24 | 14 |
+------------------+--------------------+--------+-----------------+-------------------+-------------------+-----------------+---------------+--------+
那太好了。它包含我需要的所有信息(甚至更多),但更易读的格式会更好。我可以使用什么查询来获得更像这样的内容:
+------------------+--------------------+-------+--------+--------+
| Name | emailAddress | Apple | Orange | Banana |
+------------------+--------------------+-------+--------+--------+
| Harry Potter | hpotter@gmail.com | YES | | |
| Ron Weasley | rweasley@gmail.com | YES | | |
| Hermione Granger | hgranger@gmail.com | YES | YES | |
| Severus Snape | ssnape@gmail.com | YES | YES | |
| Remus Lupin | rlupin@gmail.com | YES | | |
| Viktor Krum | vkrum@gmail.com | YES | | |
| Molly Weasley | mweasley@gmail.com | YES | YES | |
| Oliver Wood | owood@gmail.com | YES | | YES |
+------------------+--------------------+-------+--------+--------+
或者奖励,也计算水果的次数:
+------------------+--------------------+---------+---------+--------+
| Name | emailAddress | Apple | Orange | Banana |
+------------------+--------------------+---------+---------+--------+
| Harry Potter | hpotter@gmail.com | YES | | |
| Ron Weasley | rweasley@gmail.com | YES | | |
| Hermione Granger | hgranger@gmail.com | YES (2) | YES (5) | |
| Severus Snape | ssnape@gmail.com | YES | YES (4) | |
| Remus Lupin | rlupin@gmail.com | YES | | |
| Viktor Krum | vkrum@gmail.com | YES | | |
| Molly Weasley | mweasley@gmail.com | YES (2) | YES (2) | |
| Oliver Wood | owood@gmail.com | YES | | YES |
+------------------+--------------------+---------+---------+--------+
最佳答案
这应该适用于第一种情况 -
SELECT CONCAT(people.firstName, ' ', people.lastName) as Name,
people.emailAddress,
(CASE questions.fruit
WHEN 'apple' THEN 'YES'
ELSE ''
END) as Apple,
(CASE questions.fruit
WHEN 'orange' THEN 'YES'
ELSE ''
END) as Orange,
(CASE questions.fruit
WHEN 'banana' THEN 'YES'
ELSE ''
END) as Banana
From answers
Join questions ON answers.attackID = campaign.attackID
JOIN employees ON campaign.employee = employees.employeeID
WHERE campaign.campaignID = '24'
ORDER BY employees.employeeID
不确定 count 在第二种情况下如何工作。但我认为它将根据employeeid进行分组。
更新
对于第二种情况,我认为不需要文本"is",水果的数量应该足以决定。试试这个计数 -
SELECT CONCAT(people.firstName, ' ', people.lastName) as Name,
people.emailAddress,
SUM(CASE questions.fruit
WHEN 'apple' THEN 1
ELSE 0
END) as 'AppleCount',
SUM(CASE questions.fruit
WHEN 'orange' THEN 1
ELSE 0
END) as 'OrangeCount',
(CASE questions.fruit
WHEN 'banana' THEN 1
ELSE 0
END) as 'BananaCount'
From answers
Join questions ON answers.attackID = campaign.attackID
JOIN employees ON campaign.employee = employees.employeeID
WHERE campaign.campaignID = '24'
GROUP BY employees.employeeID
ORDER BY employees.employeeID
<小时/>
关于mysql - 需要 MySQL 查询来提供更具可读性的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44219578/