MySQL 笔记6

1. GROUP BY 

GROUP BY 一般在WHERE之后,在 ORDER BY 和 LIMIT之前。

Q1:

%%sql 
SELECT gender, breed_group, COUNT(DISTINCT dog_guid) AS Num_Dogs
FROM dogs
GROUP BY gender, breed_group
ORDER BY Num_Dogs DESC

去掉ORDER。

%%sql 
SELECT gender, breed_group, COUNT(DISTINCT dog_guid) AS Num_Dogs
FROM dogs
GROUP BY gender, breed_group

数字简写。

SELECT test_name, MONTH(created_at) AS Month, COUNT(created_at) AS Num_Completed_Tests
'''
test_name would be #1, Month would be #2, and Num_Completed_Tests would be #3
'''
SELECT test_name, MONTH(created_at) AS Month, COUNT(created_at) AS Num_Completed_Tests
FROM complete_tests
GROUP BY 1, 2
ORDER BY 1 ASC, 2 ASC;

2. HAVING用法。

"""
If you then wanted to output only the test-month pairs that had at least 20 records in them, you would add a HAVING clause, because the stipulation of at least 20 records only makes sense and is only computable at the aggregated group level
"""
SELECT test_name, MONTH(created_at) AS Month, COUNT(created_at) AS Num_Completed_Tests
FROM complete_tests
WHERE MONTH(created_at)=11 OR MONTH(created_at)=12
GROUP BY 1, 2
HAVING COUNT(created_at)>=20
ORDER BY 3 DESC;

Q3:

%%sql
SELECT  gender, breed_group, COUNT(DISTINCT dog_guid) AS Num_Dogs
FROM dogs 
WHERE breed_group != "" AND  breed_group IS NOT  NULL AND breed_group != "None"
GROUP BY 1,2
HAVING Num_Dogs >= 1000
ORDER BY 3 DESC

Q6:

%%sql 
SELECT COUNT(user_guid), state, ZIP
FROM users
WHERE country = "US"
GROUP BY 2, 3
ORDER BY 2 ASC, 3 DESC
LIMIT 10;
The Safest Way to Get what you Want is to Try and Deserve What you Want.
原文地址:https://www.cnblogs.com/Shinered/p/9606263.html