【问题标题】:mysql compare columns in same tablemysql比较同一张表中的列
【发布时间】:2011-07-20 13:47:55
【问题描述】:

我在 mysql 数据库中有一个表

id  fruit   number_eaten   day   
----------------------------------
1  apple        2           1
2  banana       1           1
3  orange       3           2
4  apple        1           2
5  banana       2           3
6  peach        1           3

我正在尝试弄清楚如何选择,以便我可以比较每天吃多少并放入电子表格中以便我得到

fruit     number_eaten_day_1   number_eaten_day_2    number_eaten_day_3
------------------------------------------------------------------------
apple             2                  1                      0
banana            1                  0                      2
orange            0                  3                      0
peach             0                  0                      1

【问题讨论】:

  • 虽然您可以在 SQL 中完成此操作,但请记住,数据库用于存储数据,应用程序用于格式化输出。进行简单的选择。进行这种格式化不需要太多代码。
  • @Dan,我认为使用 sql 可以更轻松地将水果名称组合在一起。
  • 比一行应用程序代码更简单? $data[$row['fruit']][$row['day']] = $row['number_eaten']。在 PHP 中,在一个简单的SELECT * FROM table 的结果的循环中会生成电子表格的结构。
  • @Dan,并不是要争论,但我根本没有为此使用 php。所以现在我必须开始为此目的在php中编写一个脚本,这在实用性上将不止一行代码。

标签: mysql join union self-join


【解决方案1】:

使用总和值 number_eaten 更容易地为每个水果和一天分别设置一行:

select fruit, day, sum(number_eaten)
from fruits_eaten_by_day 
group by fruit, day

但也应该可以通过这样做得到你需要的准确结果:

select 
  fruit, 
  sum(if(day=1, number_eaten, 0)) as number_eaten_day_1, 
  sum(if(day=2, number_eaten, 0)) as number_eaten_day_2, 
  sum(if(day=3, number_eaten, 0)) as number_eaten_day_3
from fruits_eaten_by_day
group by fruit

【讨论】:

  • 我认为您缺少表名,我也忘了提及:D
  • 谢谢,这很容易,但您可能需要添加“from tbl”以防其他人在家尝试。
猜你喜欢
  • 2017-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多