mysql - 需要 MySQL 查询来提供更具可读性的结果

标签 mysql sql database

我有一个 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/

相关文章:

php - 排序然后设置变量

mysql - 如何在 MySQL 中根据选定值创建序列?

mysql - SQL 查询在服务器中执行时间太长

SQL 查询根据聚合条件(列的总和)获取结果

database - Django 1.6 + postgres 9.3 : I want the simplest possible database configuration for development on localhost

java - Java 中最高性能的数据库

php - MySQL 表行不会更新

php - 获取数据库 mysql 中保存的查询

sql - Postgresql 中的基本 SQL 选择失败

database - 通过 http 和 json 同步 2 个 sqlite 表的最佳方法是什么?