postgresql 我可以在ORDER BY子句中使用SELECT语句中没有提到的聚合函数吗?

vx6bjr1n  于 2023-06-05  发布在  PostgreSQL
关注(0)|答案(1)|浏览(210)

(for解决方案A)我只是需要有人来帮助确认/否认我在ORDER BY子句中使用聚合函数的方式是否被允许,考虑到我在SELECT语句中没有提到这个特定的聚合函数。
(for解决方案B)对于进一步的上下文,我试图找出具有最高交易计数的卡程序的名称。我最初的版本也附上了,主要的例子是我简化尝试的结果。我知道效率,清晰度和简洁性明显缺乏。任何关于提示的替代方法的反馈,或者关于如何思考的建议,这样我就可以避免做下面的事情,直接进入最佳查询,也绝对/高度赞赏!!
给定3个表->事务:id、user_transaction_time、card_id、amount
card_programs:id,display_name卡:id,card_program_id
问:哪个卡程序的交易最多?
解决方案:
解决方案A:我的最终简化版本:

SELECT TOP 1 card_programs.display_name AS program_name
FROM transactions T
LEFT JOIN cards ON cards.id = T.card_id
LEFT JOIN card_programs ON card_programs.id = cards.card_program_id
GROUP BY card_programs.display_name
ORDER BY COUNT(T.id) DESC

解决方案B:我的第一次尝试:

WITH transaction_count_tbl AS (
SELECT card_programs.display_name AS program_name, 
card_id, 
card_programs.card_program_id, 
count(id) AS transaction_count
FROM transactions T
LEFT JOIN cards 
ON cards.id = T.card_id
LEFT JOIN card_programs
ON card_programs.id = card.card_program_id
GROUP BY 1,2,3
ORDER BY count(id) DESC
)

SELECT TOP 1 program_name
FROM transaction_count_tbl
ORDER BY transaction_count DESC
xzabzqsa

xzabzqsa1#

您可以按从1开始的列号排序,如下所示:

SELECT TOP 1 card_programs.display_name AS program_name, COUNT(T.id) AS transaction_count
FROM transactions T
LEFT JOIN cards ON cards.id = T.card_id
LEFT JOIN card_programs ON card_programs.id = cards.card_program_id
GROUP BY card_programs.display_name
ORDER BY 2 DESC

相关问题