MySQL 常用語句(查重,分割槽間查詢)
阿新 • • 發佈:2020-12-08
- 查重
select*frompeoplewherepeopleIdin(selectpeopleIdfrompeoplegroupbypeopleIdhavingcount(peopleId)>1) select * from Users where UserId in (select UserId from Users group by UserId having count(UserId) > 1)不過在資料量過大的時候查詢的速度會非常慢
selectcount(peopleId)frompeople selectcount(distinctpeopleId)frompeople - 分割槽間
業務場景:統計消費總金額大於1000元的,800到1000元的,500到800元的,以及500元以下的人數。
SELECT COUNT(CASE WHEN IFNULL(total_money,0) >=1000 THEN a.customer_id END) AS '>1000' ,COUNT(CASE WHEN IFNULL(total_money,0) >=800 AND IFNULL(total_money,0) <1000 THEN a.customer_id END) AS '800~1000' ,COUNT(CASE WHEN IFNULL(total_money,0) >=500 AND IFNULL(total_money,0) <800 THEN a.customer_id END) AS '500~800' ,COUNT(CASE WHEN IFNULL(total_money,0) <500 THEN a.customer_id END) AS '<500' FROM mc_userdb.`customer_login` a LEFT JOIN ( SELECT customer_id,SUM(order_money) AS total_money FROM mc_orderdb.`order_master` GROUP BY customer_id) b ON a.`customer_id`=b.`customer_id`
3. 現在要統計:<50、50-60、60-70、70-80、80-90、90-100、>=100分數區間的人數;
利用 INTERVAL 劃出7個區間;
再利用 elt 函式將7個區間分別返回一個列名,如下SQL:
1
|
mysql> SELECT elt(INTERVAL(score, 0, 50, 60, 70, 80, 90, 100), '<50', '50-60', '60-70', '70-80', '80-90', '90-100', '>=100') as score_level, count(name) as counts
|
4. update select用法
UPDATE
user_online_month_atu a
INNER
JOIN
(
SELECT
user_id,
sum
(c.online_times)
as
online_times,
SUM
(c.login_count)
as
login_count,
Sum
(c.view_page_count)
as
view_page_count,
LEFT
(c.log_date,length(c.log_date) - 2)
as
date
FROM
user_online_time_atu c
GROUP
BY
c.user_id ,
date
) b
ON
a.user_id = b.user_id
AND
a.`
month
`=b.
date
SET
a.online_time = b.online_times ,a.login_count=b.login_count,a.view_page_count=b.view_page_count