使用 MySQL,我有一個表,我需要在其中選擇價格列中具有不同值的行并進行計數。
表 T1
id name cat col1 col2 ...coln price
1 A cat1 1 1 1 20
2 A cat1 1 1 1 20
3 A cat1 1 1 1 20
4 A cat1 1 1 1 10
5 A cat1 1 1 1 20
6 A cat1 1 1 1 20
7 A cat1 1 1 1 20
我需要一個結果集:
id name cat col1 col2 ...coln price count_of_rows_with_same_prices
1 A cat1 1 1 1 20 6
4 A cat1 1 1 1 10 1
我用過的東西:
select price,T1.*,count(*) as count_of_rows_with_same_prices
from T1
group by 1;
但是,我需要禁用“ONLY_FULL_GROUP_BY”,因為我的選擇串列中有非聚合列。
在不禁用“ONLY_FULL_GROUP_BY”的情況下如何做到這一點?
uj5u.com熱心網友回復:
實際上你可以使用如下查詢
SELECT
id,name,cat, price, count_of_rows_with_same_prices
from
(
SELECT *, count(id) over (partition by price) as count_of_rows_with_same_prices,
row_number() over (partition by price order by id asc) as r
from T1
)T
where r=1
uj5u.com熱心網友回復:
您可以使用兩個視窗函式來做到這一點:
MIN, 處理 idCOUNT, 研究價格
這是查詢:
SELECT DISTINCT
MIN(id) OVER(
PARTITION BY name, cat, price
ORDER BY price
) AS id,
name,
cat,
col1,
col2,
....
colN,
COUNT(price) OVER(
PARTITION BY name, cat, price
ORDER BY price
) AS count_of_rows_with_same_prices
FROM
tab_t1
ORDER BY
id
你可以在這里找到一個 SQL 小提琴。
uj5u.com熱心網友回復:
首先,您想按價格獲取條目數,因此將其寫下來:
SELECT price, count(*) as rc FROM T1 GROUP BY price
接下來,您可以將其用作查詢中的子查詢:
SELECT t1.id, t1.name, t1.cat, t1.col1, t1.col2, t1.coln, t1.price, t2.rc
FROM T1 t1
INNER JOIN (SELECT price, count(*) as rc FROM T1 GROUP BY price) t2
ON t1.price = t2.price
WHERE id in (1,4)
如果您使用的是支持視窗功能的較新版本的 mysql,您還可以執行以下操作:
SELECT *
FROM
(
SELECT id, name, cat, col1, col2, coln, price
,COUNT(*) OVER (PARTITION BY price) as count_of_rows_with_same_prices
FROM T1
)
WHERE id in (1, 4)
另外,不要禁用 ONLY_FULL_GROUP_BY。那件事被設定為 TRUE 是有原因的。當你關閉它時,你只會撰寫損壞的錯誤 SQL,你的問題仍然無法解決。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/460675.html
上一篇:UNIONALL定義表
