Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
?
Solved

Creating crosstab query using COUNT gives incorrect row and column totals

Posted on 2004-09-15
1
Medium Priority
?
440 Views
Last Modified: 2012-08-14
Can someone tell me why the row and column totals compute properly with this crosstab query (using SUM):
MySQL Version: 4.0.20-standard

#crosstab
SELECT MONTHNAME(dt),
      SUM(IF(category = 'A',id, 0)) AS 'cat a',
      SUM(IF(category = 'B',id, 0)) AS 'cat b',
      SUM(IF(category = 'C',id, 0)) AS 'cat c',
#row totals
      SUM(id) AS 'TOTAL'
FROM t1
GROUP BY MONTH(dt)
UNION
#column totals
SELECT 'YTD',
      SUM(IF(category = 'A',id, 0)) AS 'cat a',
      SUM(IF(category = 'B',id, 0)) AS 'cat b',
      SUM(IF(category = 'C',id, 0)) AS 'cat c',
      SUM(id) AS 'TOTAL'
FROM t1;

But, this same crosstab query using COUNT, gives incorrect Totals:

#crosstab
SELECT MONTHNAME(dt),
      COUNT(DISTINCT(IF(category = 'A',id, 0))) AS 'cat a',
      COUNT(DISTINCT(IF(category = 'B',id, 0))) AS 'cat b',
      COUNT(DISTINCT(IF(category = 'C',id, 0))) AS 'cat c',
#row totals
      COUNT(DISTINCT(id)) AS 'TOTAL'
FROM t1
GROUP BY MONTH(dt)
UNION
#column totals
SELECT 'YTD',
      COUNT(DISTINCT(IF(category = 'A',id, 0))) AS 'cat a',
      COUNT(DISTINCT(IF(category = 'B',id, 0))) AS 'cat b',
      COUNT(DISTINCT(IF(category = 'C',id, 0))) AS 'cat c',
      COUNT(DISTINCT(id)) AS 'TOTAL'
FROM t1;

-------------------------------------------------
Here's the table structure:
CREATE TABLE `t1` (                                                                                                                                      
         `id` int(11) NOT NULL default '0',                                                                                                                      
         `category` char(2) default NULL,                                                                                                                        
         `dt` date default NULL,                                                                                                                                
         PRIMARY KEY  (`id`)                                                                                                                                    
---------------------------------------------------
Here's the data:
1,A,2004-01-01,
2,B,2004-04-01,
3,C,2004-02-01,
4,A,2004-05-01,
5,B,2004-03-01,
6,C,2004-04-01,
7,A,2004-06-01,
8,B,2004-01-01,

--------------------------------------------------
I haven't been able to find anything on this topic via internet searches.
0
Comment
Question by:dplinnane
1 Comment
 
LVL 12

Accepted Solution

by:
AdrianSRU earned 2000 total points
ID: 12070426
COUNT gives the number of non-null values.

COUNT(DISTINCT(IF(category = 'A',id, 0)))
will not be null unless id is null.

Try this:
COUNT(DISTINCT(IF(category = 'A',id, NULL)))


-Adrian
0

Featured Post

 [eBook] Windows Nano Server

Download this FREE eBook and learn all you need to get started with Windows Nano Server, including deployment options, remote management
and troubleshooting tips and tricks

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction This article is intended for those who are new to PHP error handling (https://www.experts-exchange.com/articles/11769/And-by-the-way-I-am-New-to-PHP.html).  It addresses one of the most common problems that plague beginning PHP develop…
When table data gets too large to manage or queries take too long to execute the solution is often to buy bigger hardware or assign more CPUs and memory resources to the machine to solve the problem. However, the best, cheapest and most effective so…
In this video, Percona Solution Engineer Dimitri Vanoverbeke discusses why you want to use at least three nodes in a database cluster. To discuss how Percona Consulting can help with your design and architecture needs for your database and infras…
In this video, Percona Solutions Engineer Barrett Chambers discusses some of the basic syntax differences between MySQL and MongoDB. To learn more check out our webinar on MongoDB administration for MySQL DBA: https://www.percona.com/resources/we…
Suggested Courses
Course of the Month13 days, 17 hours left to enroll

580 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question