Issue
I have next table :
CREATE TABLE sales
( id INT ( 10) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
event_name VARCHAR( 99),
cashier_name VARCHAR( 99),
sale_date VARCHAR( 99),
sale_time VARCHAR( 99)
) ENGINE=INNODB
And next data (query included for someone to test) :
ID EVENT_NAME CASHIER_NAME SALE_DATE SALE_TIME
----------------------------------------------------------
1 Metallico 8pm Jenny 2022-03-11 15:37
2 Metallico 8pm Sandy 2022-03-11 16:01
3 Red Puppets 10am Jenny 2022-03-08 09:40
4 Red Puppets 10am Jenny 2022-03-11 08:55
5 Wild Cats 8pm Sandy 2022-02-25 19:13
6 Wild Cats 8pm Jenny 2022-02-25 16:59
INSERT INTO sales (id, event_name, cashier_name, sale_date, sale_time)
VALUES (1, 'Metallico 8pm', 'Jenny', '2022-03-11', '15:37'),
(2, 'Metallico 8pm', 'Sandy', '2022-03-11', '16:01'),
(3, 'Red Puppets 10am','Jenny', '2022-03-08', '09:40'),
(4, 'Red Puppets 10am','Jenny', '2022-03-11', '08:55'),
(5, 'Wild Cats 8pm', 'Sandy', '2022-02-25', '19:13'),
(6, 'Wild Cats 8pm', 'Jenny', '2022-02-25', '16:59')
As the title says, I need to get JENNY because she has sales for different events in the same day (1,4), Sandy also has sales for different events but dates are different (2,5).
Next query gives me the events (3 records) but I’m not sure how to include the condition with sales in the same day
:
SELECT *
FROM sales
GROUP BY event_name
HAVING COUNT(*) > 1
If I change the GROUP BY
I get Jenny and Sandy (2 records) but not sure how to exclude Sandy :
SELECT *
FROM sales
GROUP BY sale_date
HAVING COUNT(*) > 1
(And no, this is not homework, I work at a museum with a small theater inside for children plays, concerts and contests, we are having "issues" with cashiers and money and we are trying to cross some data to catch the problem.)
Solution
Try:
select CASHIER_NAME
from sales
group by cashier_name,sale_date
having COUNT( distinct event_name) >1 ;
All what you need is group by cashier_name,sale_date
and having COUNT( distinct event_name) >1 ;
Answered By – Ergest Basha
Answer Checked By – Katrina (BugsFixing Volunteer)