【问题标题】:Count enumerated values?计算枚举值?
【发布时间】:2010-04-07 20:41:04
【问题描述】:

如果我的桌子是这样的:

CREATE TABLE `daily_individual_tracking` (
  `daily_individual_tracking_id` int(10) unsigned NOT NULL auto_increment,
  `daily_individual_tracking_date` date NOT NULL default ''0000-00-00'',
  `sales` enum(''no'',''yes'') NOT NULL COMMENT ''no'',
  `repairs` enum(''no'',''yes'') NOT NULL COMMENT ''no'',
  `shipping` enum(''no'',''yes'') NOT NULL COMMENT ''no'',
  PRIMARY KEY  (`daily_individual_tracking_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1

基本上这些字段可以是yes或no。

我如何计算一个日期范围内每一列有多少是的?

谢谢!!

【问题讨论】:

  • 当你有一个大数据集并且需要添加一个新的枚举类型时,枚举列是讨厌的。根据架构,更新具有新枚举类型的表可能需要长达 45 分钟,您可能需要考虑使用链接(数据透视)表。在您的具体示例中,您可能还需要考虑布尔列类型,因为它基于 int 与基于文本,并且会更快。

标签: mysql count enums


【解决方案1】:

您可以像这样运行三个查询:

SELECT COUNT(*)
FROM daily_individual_tracking
WHERE sales = 'YES'
AND daily_individual_tracking_date BETWEEN '2010-01-01' AND '2010-03-31' 

或者,如果您愿意,您可以像这样一次获得所有三个:

SELECT (
    SELECT COUNT(*)
    FROM daily_individual_tracking
    WHERE sales = 'YES'
    AND daily_individual_tracking_date BETWEEN '2010-01-01' AND '2010-03-31'
) AS sales_count, (
    SELECT COUNT(*)
    FROM daily_individual_tracking
    WHERE repairs = 'YES'
    AND daily_individual_tracking_date BETWEEN '2010-01-01' AND '2010-03-31'
) AS repairs_count, (
    SELECT COUNT(*)
    FROM daily_individual_tracking
    WHERE shipping = 'YES'
    AND daily_individual_tracking_date BETWEEN '2010-01-01' AND '2010-03-31'
) AS shipping_count

另一种方法是使用 SUM 而不是 COUNT。你也可以试试这个,看看它是如何影响性能的:

SELECT
    SUM(sales = 'YES') AS sales_count,
    SUM(repairs = 'YES') AS repairs_count,
    SUM(shipping = 'YES') AS shipping_count
FROM daily_individual_tracking
WHERE daily_individual_tracking_date BETWEEN '2010-01-01' AND '2010-03-31'

【讨论】:

  • 我明白了,所以我是否需要为每个查询运行不同的查询:销售、维修、运输?谢谢!!
  • @John:如果需要,您可以在一个查询中完成。我给了你更多的选择,你可以试试。
  • 谢谢 :) 我会接受你的回答,但它说我必须再等 3 分钟(我猜是一个新的 SO 功能)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多